Мы использовали в таблицах выполнения символ / чтобы обозначать маркер конца строки, который не является печатным символом. Мы не использовали в наших программах выражения вида WRITELN(‘/’) чтобы избежать путаницы.
На самом деле, Паскаль-машина в качестве маркера конца строки использует не символ /, а некий специальный символ, который не имеет визуального отображения. Этот символ помещается в конец строки всякий раз, когда выполняется выражение WRITELN.
Но что происходит при чтении маркера конца строки? Рассмотрим следующий код:
REWRITE(F1);
WRITE(F1, ‘#’);
WRITELN(F1);
RESET(F1);
READ(F1, Ch1);
READ(F1, Ch2);
В Ch1 будет помещен символ #, а Ch2 будет иметь значение пробела, как печатного эквивалента символа маркера конца строки.
Если границы строк должны контролироваться программой, необходимо иметь возможность определять их. Не имеет смысла проверять, является ли каждый считанный символ пробелом, на который был заменен маркер конца строки, поскольку пробелы встречаются внутри строк.
В Паскале имеется стандартное слово EOLN, которое может быть использовано как <условие> для проверки маркера конца строки который может быть считан при следующей операции READ. Когда в INPUT в позиции курсора находится маркер конца строки, EOLN принимает значение TRUE, в противном случае EOLN принимает значение FALSE. Аналогичное справедливо для текстовых файлов. При чтении файла F1 EOLN(F1) вернет TRUE, если в позиции курсора находится маркер конца строки.
Предположим, F1 содержит одну строку, в которой имеется один символ A, законченную маркером конца строки. Вот таблица выполнения, которая иллюстрирует поведение EOLN.
После выполнения
F1
EOLN(F1)
Ch1
Ch2
RESET(F1)
READ(F1, Ch1)
READ(F1, Ch2)
A/
A/
A/_
FALSE
TRUE
?
?
A
A
?
?
□
С помощью символа □ мы явно указываем символ пробела. Значение ? которое принимает EOLN(F1) после того как считан маркер конца строки, означает, что значение EOLN не определено когда в файле нет больше входных символов. Большинство реализаций Паскаль-машины что-то возвращают в этом случае, но на этот счет не существует какого-либо соглашения или стандарта, поэтому не стоит полагаться на это при разработке программ, поэтому EOLN не может быть использован, когда входная последовательность прочитана полностью.