简体   繁体   中英

Reading the same line from a file many times in Fortran

I would like to read the same line of a file many time in Fortran. The concerned data are real values. I tried to build this code as test but I am always getting it wrong.

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

The dat.dat file contains one line with 25.325654515464564564

The code return the following error.

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

How do I fix this bug?

Such non-advancing input (using advance='no' ) doesn't mean that the file position is not advanced at all. It means that the file position isn't advanced beyond what is needed to satisfy the requirements of the input list.

So, in this case, the file position is advanced by reading the single "real number" into the character variable lnumber . The next read will continue from this later point. This later point happens to be the end of the file.

With advancing input more generally, the file position is advanced to the start of the next record even if the record is not required in entirety.


As High Performance Mark comments , reading the same line over and over again likely isn't what you should be doing. You could read the line into a character variable (such as is done here) and repeatedly use that variable as an internal file . However, if you really want to read a line again, consider backspace .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM