我有一个从一堆输入文件中读取数据的 Fortran 程序。第一个文件包含我将读取的其他三个文件的名称,在输入文件(我stdin
在程序执行时重定向到)中指定,如下所示
"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
对于第三个文件,无论我将文件名按什么顺序放在输入文件中,填充都不起作用,Fortran 会尝试使用“data/file_number_3.txt”之类的名称打开一个,即带有一堆尾随空格。这会在我的文件夹中创建一个名为的空文件data/file_number_3.txt (White Space Conflict)
,一旦我尝试从该文件中读取,程序就会因 EOF 错误而崩溃。
我试过trim()
在不同的地方添加,例如open(15,file=trim(fname))
没有任何成功。我认为这与 Fortran 中字符数组的固定长度有关,但我认为trim()
会解决这个问题 - 这个假设不正确吗?
我该如何解决和解决这个问题?