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

在Fortran中多次从文件中读取同一行,fortran,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 =f

我想在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
如何修复此错误?

使用advance='no'这样的非高级输入并不意味着文件位置根本不高级。这意味着文件位置不会超出满足输入列表要求所需的范围

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

一般来说,随着输入的推进,文件位置将前进到下一条记录的开头,即使该记录不是全部需要的

作为高性能的标志,反复阅读同一行可能不是你应该做的。您可以将该行读入字符变量(如此处所述),并将该变量作为内部文件重复使用。但是,如果你真的想再读一行,考虑退格。

< P>使用Advest==“否”的这种非进阶输入并不意味着文件位置根本不先进。这意味着文件位置不会超出满足输入列表要求所需的范围

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

一般来说,随着输入的推进,文件位置将前进到下一条记录的开头,即使该记录不是全部需要的


作为高性能的标志,反复阅读同一行可能不是你应该做的。您可以将该行读入字符变量(如此处所述),并将该变量作为内部文件重复使用。但是,如果你真的想再读一行,考虑退格。

你是否认为使用“前进”=“否”意味着文件在被读取时仍然保持在行的开头?多次读取同一行几乎肯定不是正确的方法,无论你想做什么。几乎可以肯定的是,阅读一次这行代码并处理它(如果你愿意的话)很多次会更好。但是不要让我对你的方法的效用的怀疑阻止你。是的,通常指针应该保持不变。请看一下Fortan中read语句的规范。也许,我使用它的方式是错误的。您提供的链接并不表示“指针应该保持固定”。您是否认为使用advance='no'意味着文件在被读取时仍然位于行首?多次读取同一行几乎肯定不是正确的方法,不管你想做什么。几乎可以肯定的是,阅读一次这行代码并处理它(如果你愿意的话)很多次会更好。但是不要让我对你的方法的效用的怀疑阻止你。是的,通常指针应该保持不变。请看一下Fortan中read语句的规范。也许,我使用它的方式是错误的。你提供的链接没有表明“指针应该保持固定”。