Когда INPUT содержит набор строк, для перемещения через границу строки может использоваться выражение READLN. В результате выполнения выражения READLN , курсор будет перемещен за ближайший маркер конца строки. Если маркер конца строки не встретится, READLN возвратит ошибку. READLN (F1) будет выполняться для файла F1.
Значение условий EOLN и EOF и поведение выражений READ и READLN определены только для ситуаций, когда они выполняются до прохождения соответствующих их границ. Например значение EOF не определено за границами файла. Поэтому важно правильно использовать операторы чтения файла и определения границ, например по шаблону, предлагаемому следующей программой:
PROGRAM CopyLines (INPUT, OUTPUT);
{Копирует INPUT в OUTPUT сохраняя структуру строк}
VAR
Ch: CHAR;
BEGIN {CopyLines}
WHILE NOT EOF
DO
BEGIN {Копировать одну строку}
WHILE NOT EOLN
DO
BEGIN {Копировать один символ}
READ(Ch);
WRITE(Ch);
END;
READLN;
WRITELN
END
END. {CopyLines}
Внешнее выражение WHILE защищает внутренний код от ситуации выхода за конец файла. Внутреннее выражение WHILE защищает его оператор READ от чтения маркера конца строки. После того как внутренний WHILE скопировал строку, с помощью READLN курсор перемещается за маркер конца строки, а в OUTPUT создается маркер конца строки с помощью WRITELN. Детали в следующей таблице выполнения:
Ch
INPUT
EOF
EOLN
OUTPUT
WHILE NOT EOF
WHILE NOT EOLN
READ(Ch)
WRITE(Ch)
WHILE NOT EOLN
READLN
WRITELN
WHILE NOT EOF
WHILE NOT EOLN
READ(Ch)
WRITE(Ch)
WHILE NOT EOLN
READLN
WRITELN
WHILE NOT EOF
?
A
B
A/B/
A/B/
A/B/
A/B/
A/B/_
FALSE
FALSE
FALSE
FALSE
TRUE
FALSE
TRUE
FLASE
TRUE
?
_
A_
A/_
A/B_
A/B/_
Ранее мы использовали в качестве маркера конца последовательности символ # и копирование файлов выполняли по примерно следующему образцу:
READ(F1, Ch);
WHILE Ch <> ‘#’
DO
BEGIN
WRITE(F2, Ch);
READ(F1, Ch)
END
Если мы используем маркер конца строки, то получаем следующий образец:
WHILE NOT EOLN(F1)
DO
BEGIN
READ(F1, Ch)
WRITE(F2, Ch);
END
Второй вариант более соответствует структуре текстовых файлов и более естественно реализует операцию копирования.