我想在Fortran中多次读取同一行文件。有关数据是实际价值。我试着将这段代码构建为测试,但我总是把它弄错。
program advance
implicit none
integer , parameter :: ut = 20
character(len=7) :: fname = 'dat.dat'
integer :: n, idx
character(len=100) :: lnumber
open(unit = ut, file =fname, status='old', action='read')
n = 10
do idx = 1, n
read(ut, '(a)', advance = 'no') lnumber
print *, lnumber
end do
end program advance
dat.dat
文件包含一行25.325654515464564564
代码返回以下错误。
At line 13 of file advance.f90 (unit = 20, file = 'dat.dat')
Fortran runtime error: End of record
如何修复此错误?
答案 0 :(得分:5)
此类非前进输入(使用advance='no'
)并不意味着文件位置根本没有提前。这意味着文件位置不会超出超出所需的以满足输入列表的要求。
因此,在这种情况下,通过将单个“实数”读入字符变量lnumber
来提升文件位置。下一次阅读将从后面的这一点继续。这个后来的点恰好是文件的结尾。
更一般地,提前输入,即使整个记录不需要,文件位置也会提前到下一个记录的开头。
作为高绩效标记comments,一遍又一遍地读同一行可能不是你应该做的。您可以将该行读入字符变量(例如此处完成)并重复使用该变量作为内部文件。但是,如果您真的想再次阅读一行,请考虑backspace
。