Я хотел бы использовать потоковый ввод/вывод FORTRAN для создания программы, которая сообщает мне, сколько строк имеет текстовый файл. Идея заключается в том, чтобы сделать что-то вроде этого:Как проверить EOF/EOL с потоковым I/O в Fortran?
OPEN(UNIT=10,ACCESS='STREAM',FILE='testfile.txt')
nLines=0
bContinue=.TRUE.
DO WHILE (bContinue)
READ(UNIT=10) cCharacter
IF (cCharacter.EQ.{EOL-char}) nLines=nLines+1
IF (cCharacter.EQ.{EOF-char}) bContinue=.FALSE.
ENDDO
(я не включил объявление переменной, но я думаю, вы получите представление о том, что они есть, единственное важное уточнение было бы, что это cCharacter имеет LEN = 1)
Моя проблема в том, что я не знаю, как проверить, является ли символ, который я только что прочитал из файла, это конец строки или конец файла («ifs» в коде). Когда вы читаете и печатаете символы таким образом, вы в конечном итоге получаете символы новой строки в том же месте, в котором вы были в исходном тексте, поэтому я думаю, что он читает и распознает их как «персонажей». Возможно, превращение символов в целые числа и сравнение с соответствующим числом? Или есть более прямой путь?
(Я знаю, что вы можете использовать чтение регистра (EDIT: я имел в виду чтение записей), чтобы сделать программу, которая легче читает строки и добавить IOstatus для проверки на eof, но «счетчик строк» является просто полезным Например, идея состоит в том, чтобы научиться перемещаться более контролируемым образом через текстовый файл)
Да, я знаю, что задача, которую я использовал в качестве примера, может быть выполнена так же, как при чтении записей. Тем не менее, есть небольшая вещь, которую я хотел бы указать на ваш код: я не знаю, является ли это только из-за компилятора, компьютера или происходит во всех кодах, но если вы сохраните чтение в переменной «line» ", он просто пропустит пустые строки. Поскольку вы не используете «строку» для чего-либо еще, это можно исправить, если вы просто «читаете», не сохраняя его в любой переменной (таким образом будут подсчитываться все строки). Однако, например, нет способа узнать, где пустые строки в тексте, используя регистр. – Nordico
Я знаю, что это может показаться глупым, но я хотел бы знать способ общения с текстовыми файлами, которые более универсальны/точны, чем чтение записей (я использовал «регистр» в основном вопросе, но я имел в виду запись). Например, поиск слова будет намного проще с потоком, чем с записью (копирование точно одной части текста невозможно, потому что, как я уже сказал, если вы читаете переменную, она пропускает eol). Знаете ли вы о не переносимом способе проверки EOL? Сколько «не переносных»? Очевидно, я предпочел бы портативный, но знание одного несовершенного способа лучше, чем незнание. – Nordico
Как не понять, почему вы считаете, что тест чтения в строки/записи не универсален. Вы беспокоитесь о том, что слова разбиваются по границам строк? В противном случае я не понимаю, почему поиск слова будет намного проще с помощью stream io. –