Проверка на наличие определенного символа в качестве ограничителя строки делает вашу программу зависимой от ОС. Было бы лучше использовать возможности языка, чтобы ваша программа зависела от компилятора и ОС. Поскольку строки в основном являются записями, зачем делать это с помощью ввода-вывода steam? Этот запрос, кажется, превращает легкую работу в тяжелую. Если вы можете использовать обычный ввод-вывод, вот пример программы для подсчета строк в текстовом файле.
РЕДАКТИРОВАТЬ: фрагмент кода был изменен в программу, чтобы ответить на вопросы в комментариях. С «строкой» в качестве символьной переменной, когда я тестирую программу с помощью gfortran и ifort, я не вижу проблемы, когда во входном файле есть пустые или пустые строки.
program test_lc
use, intrinsic :: iso_fortran_env
integer :: LineCount, Read_Code
character (len=200) :: line
open (unit=51, file="temp.txt", status="old", access='sequential', form='formatted', action='read' )
LineCount = 0
ReadLoop: do
read (51, '(A)', iostat=Read_Code) line
if ( Read_Code /= 0 ) then
if ( Read_Code == iostat_end ) then
exit ReadLoop ! end of file --> line count found
else
write ( *, '( / "read error: ", I0 )' ) Read_Code
stop
end if
end if
LineCount = LineCount + 1
write (*, '( I0, ": ''", A, "''" )' ) LineCount, trim (line)
if ( len_trim (line) == 0 ) write (*, '("The above is an empty or all blank line.")' )
end do ReadLoop
write (*, *) "found", LineCount, " lines"
end program test_lc
Если вы хотите продолжить обработку файла, вы можете перемотать его.
приписка
Основная причина, по которой я использовал Fortran Stream IO, - это чтение файлов, созданных на других языках, например, C
Предоставляются переносимые методы для написания границ новой строки; Я не знаю о переносном методе для проверки такого.