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

时间:2018-05-14 14:08:24

标签: 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

dat.dat文件包含一行25.325654515464564564

代码返回以下错误。

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

如何修复此错误?

1 个答案:

答案 0 :(得分:5)

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

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

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

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