0

私は F90 でプログラムを作成しました。このプログラムは、テキスト ファイルからいくつかの入力配列を読み取り、それらを関数を介して 1 つの出力ファイルに結合します。入力ファイルの 1 つは、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')

また、2 つの別個の getarg コマンドを使用して、コマンド ラインに MMDDDYY.tuvr MMDDYY.fxi と入力してみましたが、プログラムは実行されましたが、出力が空だったため、TUVR ファイルが見つからないようでした。

4

1 に答える 1

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