0

我在 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 文件。

4

1 回答 1

2

我在使用getarg. 我get_command_argument从 Fortran 2003 开始​​使用。我认为您只是忘记使用//来连接字符串。

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
于 2013-03-12T18:50:33.107 回答