Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Копирование строк
Когда INPUT содержит набор строк, для перемещения через границу строки может использоваться выражение READLN. В результате выполнения выражения READLN, курсор будет перемещен за ближайший маркер конца строки. Если маркер конца строки не встретится, READLN возвратит ошибку. READLN (F1) будет выполняться для файла F1.
READLN(Ch1, Ch2, Ch3)
Будет эквивалентно
READ(Ch1); READ(Ch2); READ(Ch3); READLN
SR12. <выражение READ>::= READ(<список идентификаторов>) | RESET(<идентификатор>) | READLN(<список идентификаторов>)
Значение условий 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. Детали в следующей таблице выполнения:
Ранее мы использовали в качестве маркера конца последовательности символ # и копирование файлов выполняли по примерно следующему образцу:
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
Второй вариант более соответствует структуре текстовых файлов и более естественно реализует операцию копирования.
|