一連の入力ファイルからデータを読み取る Fortran プログラムがあります。stdin
最初のファイルには、次のように、入力ファイル (プログラムの実行時にリダイレクトするファイル) で指定された、読み込む他の 3 つのファイルの名前が含まれています。
"data/file_1.dat" "data/file2.dat" "data/file_number_3.txt"
それらは通常のスペースで区切られており、行の末尾にスペースはなく、改行だけです。ファイル名は次のように読みます。
character*30 fnames(3)
read *, fnames
次に、ファイル名をパラメーターとして受け取る関数を呼び出して、データの読み取りに進みます。
subroutine read_from_data_file(fname)
implicit none
character*(*) fname
open(15,file=fname)
! read some data
end subroutine read_from_data_file
! in the main program:
do i=1,3
call read_from_data_file(trim(fnames(i)))
end do
3 番目のファイルの場合、入力ファイルにファイル名を入れる順序に関係なく、パディングは機能せず、Fortran は「data/file_number_3.txt」のような名前で、つまり末尾がたくさんあるファイルを開こうとします。スペース。これにより、私のフォルダーにという名前の空のファイルが作成さdata/file_number_3.txt (White Space Conflict)
れ、ファイルから読み取ろうとするとすぐに、プログラムが EOF エラーでクラッシュします。
trim()
さまざまな場所に追加しようとしましたがopen(15,file=trim(fname))
、成功しませんでした。Fortranの文字配列の固定長と関係があると思いますが、それを処理すると思いましtrim()
た-その仮定は間違っていますか?
これをトラブルシューティングして修正するにはどうすればよいですか?