在Fortran中多次从文件中读取同一行

man*_*any 1 fortran

我想在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
Run Code Online (Sandbox Code Playgroud)

dat.dat文件包含一行25.325654515464564564

该代码返回以下错误.

At line 13 of file advance.f90 (unit = 20, file = 'dat.dat')
Fortran runtime error: End of record
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

fra*_*lus 5

这种非前进输入(使用advance='no')并不意味着文件位置根本没有提前.这意味着文件位置不会超出满足输入列表要求所需的位置.

因此,在这种情况下,通过将单个"实数"读入字符变量来提前文件位置lnumber.下一次阅读将从后面的这一点继续.这个后来的点恰好是文件的结尾.

随着更一般地推进输入,即使整个不需要记录,文件位置也会前进到下一个记录的开头.


正如高绩效标志评论一样,一遍又一遍地读同一行可能不是你应该做的.您可以将该行读入字符变量(例如此处完成)并重复使用该变量作为内部文件.但是,如果你真的想再读一行,请考虑一下backspace.