Fortran 实现getarg子例程调用

Fortran 实现getarg子例程调用,fortran,command-line-arguments,filenames,Fortran,Command Line Arguments,Filenames,我用F90编写了一个程序,它从文本文件中读取几个输入数组,然后通过一个函数将它们组合到一个输出文件中。其中一个输入文件命名为使用MMDDYY.tuvr收集数据的日期,然后输出文件命名为MMDDYY.fxi。我希望在运行程序时能够在命令行中输入数据的MMDDYY,而不是每次都必须手动更改代码和编译,这就是为什么我尝试使用getarg,但我似乎无法使其正常工作。下面列出了我试图使用的代码(仅显示get arg和open命令,而不是整个程序,因为这是我遇到问题的地方): 我还尝试只使用两个单独的get

我用F90编写了一个程序,它从文本文件中读取几个输入数组,然后通过一个函数将它们组合到一个输出文件中。其中一个输入文件命名为使用MMDDYY.tuvr收集数据的日期,然后输出文件命名为MMDDYY.fxi。我希望在运行程序时能够在命令行中输入数据的MMDDYY,而不是每次都必须手动更改代码和编译,这就是为什么我尝试使用getarg,但我似乎无法使其正常工作。下面列出了我试图使用的代码(仅显示get arg和open命令,而不是整个程序,因为这是我遇到问题的地方):


我还尝试只使用两个单独的getarg命令,在命令行中输入MMDDDYY.tuvr MMDDYY.fxi,程序就运行了,但它似乎找不到我的tuvr文件,因为输出是空的

我在使用
getarg
方面不是很有经验。我使用Fortran 2003中的
get\u命令\u参数
。我想您只是忘记了使用
/
来连接字符串

CHARACTER(len=20) :: arg, tuvrname, fxiname
CALL getarg(1, arg)
IF(LEN_TRIM(arg) == 0) THEN
    print*,'No date provided'
    STOP
ELSE
    tuvrname = TRIM(arg)//'.tuvr'
    fxiname = TRIM(arg)//'.fxi'
ENDIF

print *, tuvrname, fxiname

end

字符(len=20)::arg、tuvrname、fxiname

if(command_argument_count())如果我真的吹毛求疵,我会说你没有用F90编写程序,而是用一种专有的扩展语言。我实现了如下:
CHARACTER(len=20)::arg,tuvrname,fxiname CALL getarg(1,arg)if(len_TRIM(arg)==0)然后打印*,'No date provided'STOP ELSE tuvrname=TRIM(arg)/'。tuvr'fxiname=TRIM(arg)//“.fxi”ENDIF
但编译后,我在命令提示符下输入“/createfxi AP2412”,它会给我“未提供日期”输出。不确定接下来会发生什么。因此,请参阅编译器手册以了解getarg的确切定义,它的行为可能与我的稍有不同,这是非标准的。
CHARACTER(len=20) :: arg, tuvrname, fxiname
CALL getarg(1, arg)
IF(LEN_TRIM(arg) == 0) THEN
    print*,'No date provided'
    STOP
ELSE
    tuvrname = TRIM(arg)//'.tuvr'
    fxiname = TRIM(arg)//'.fxi'
ENDIF

print *, tuvrname, fxiname

end
CHARACTER(len=20) :: arg, tuvrname, fxiname
if (command_argument_count()<1) then
  stop "Provide the file name."
end if
CALL get_command_argument(1, value=arg)

tuvrname = TRIM(arg)//'.tuvr'
fxiname = TRIM(arg)//'.fxi'

print *, tuvrname, fxiname

end