我知道如何使用函数
Fortran
在GET_COMMAND_ARGUMENT()
中获取简单的命令行参数,如下所示:
program silly_app
character(len=10) :: arg
integer :: i, x
do i = 1, command_argument_count()
call GET_COMMAND_ARGUMENT(i, arg)
select case (arg)
case ('-s', '--SA')
x = 0
case ('-f', '--FEWS')
x = 1
end select
enddo
end program
但是,我想要实现的是通过命令行解析参数并在该特定参数之后读取字符串。该程序应该这样调用:
silly_app.exe -f -p "C:\TEMP\"
其中 -p 参数使程序将参数“C:\TEMP”读取到程序内部使用的变量。
当你有循环时
do i = 1, command_argument_count()
end do
您是说您期望执行循环体的次数等于
command_argument_count()
(命令行上的参数数量)的结果。当然,这是做事的一种方式。
但是您的迭代次数实际上可能更好地考虑为事先未知。毕竟,您可能希望将两个(或更多)参数视为一个集合。例如
-p string
是一对。
这是一个迭代次数不定的循环:
i=0
do
i=i+1
if (i.gt.command_argument_count()) exit
end do
这样表述,我们可以说:
character(:), allocatable :: arg, pstr ! For F2023 get_command_argument
integer i
i=0
do
i=i+1
if (i.gt.command_argument_count()) exit
call get_command_argument(i, arg)
if (arg=='-p') then
i=i+1
call get_command_argument(i, pstr)
end if
end do
这可以整理很多,可以用
select case
编写并处理其他选项。延迟长度字符很好,但您可能需要使用它们与此处显示的略有不同。
这个其他问题的答案也给出了很好的提示。