Работа с текстовыми файлами в языке Паскаль - 18 стр.

UptoLike

18
while not EOF(FIn) do
begin
{ Определение следующей позиции в циклическом буфере }
{ I будет меняться на каждой последующей итерации: }
{ 1, 2, ..., N, 1, 2 и т. д. }
I := 1 + I mod N;
{ Запись строки из элемента I буфера, эта строка }
{ была прочитана из входного файла N шагов назад }
WriteLn(FOut, ASBuffer[I]);
{ Чтение очередной строки в элемент I буфера }
ReadLn(FIn, ASBuffer[I])
end; { while not EOF(FIn) }
{ Закрытие файлов }
Close(FIn);
Close(FOut)
end { if N > NMax (else) }
end.
Замечание: Данная программа (как и программа s_3_1 из примера 3) будет
считать, что количество строк в файле на единицу больше количества в нём
символов перевода строки. Так, будет считаться, что файл с содержимым:
ABC
состоит из двух строк (первая строка: “ABC”, вторая строка пустая). Поскольку
программа всегда добавляет в конец выходного файла символ перевода строки
(если последняя записанная строка не пустая), копирование содержимого файла, в
конце которого есть символ перевода строки, без одной последней строки
фактически приведёт к тому, что последняя (пустая) строка также
будет
скопирована.
При сравнении данного решения с решением той же задачи методом
посимвольной обработки (текст программы s_3_1 из примера 3) можно
отметить, что выбранный здесь способ даёт выигрыш в производительности