Чтение одной и той же строки из файла много раз в Фортране - PullRequest
0 голосов
/ 14 мая 2018

Я бы хотел прочитать одну и ту же строку файла много раз в Фортране. Соответствующие данные являются реальными значениями. Я пытался построить этот код в качестве теста, но я всегда ошибаюсь.

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 голосов
/ 14 мая 2018

Такой не продвигающийся ввод (с использованием advance='no') не означает, что позиция файла вообще не продвигается. Это означает, что позиция файла не продвигается сверх того, что требуется для удовлетворения требований списка ввода.

Таким образом, в этом случае положение файла улучшается путем считывания одного «действительного числа» в символьную переменную lnumber. Следующее чтение продолжится с этого более позднего пункта. Эта более поздняя точка оказывается концом файла.

При более широком вводе , вводимом , позиция файла перемещается к началу следующей записи, даже если запись не требуется полностью.


Как отмечает High Performance Mark , комментируя , чтение одной и той же строки снова и снова, скорее всего, не то, что вам следует делать. Вы можете прочитать строку в символьную переменную (например, как это делается здесь) и многократно использовать эту переменную в качестве внутреннего файла . Однако, если вы действительно хотите снова прочитать строку, рассмотрите backspace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...