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