实现getarg子例程调用

时间:2013-03-12 18:22:10

标签: fortran command-line-arguments filenames

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

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

OPEN(1, file = tuvrname, status='old', action='read')
....
OPEN(4, file = fxiname, status='replace', action='write')

我还尝试使用两个单独的getarg命令并在命令行中输入MMDDDYY.tuvr MMDDYY.fxi并运行程序,但由于输出为空,它似乎无法找到我的TUVR文件。

1 个答案:

答案 0 :(得分:2)

我在使用getarg时并不是很有经验。我使用Fortran 2003中的get_command_argument。我想你只是忘了使用//来连接字符串。

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