Пусть на диске есть текстовый файл, содержащий информацию о доходах Каждая строка файла начинается с цифры, соответствующей величине дохода, за которой следует строка символов — комментарий. Содержимое файла может быть, например, таким:
250 Чтение лекций
1000 Гонорар за книгу
120 Доход по акциям ГАЗПРОМ
Пусть нужно вычислить суммарный доход. Решение задачи довольно очевидно: открыть файл, прочитать число из первой строки и добавить его к сумме,прочитать число из второй строки и добавить его к сумме и т. д. После прочтения последней строки вывести результат.
Но как определить, что прочитана последняя строка, или, другими словами, достигнут конец файла?
Для этого нужно проверить значение, возвращаемое функцией eof (End Of File — коней файла), описание которой выглядит так:
Формат:
function E0F(имя файловой переменной);
У функции eof один параметр — файловая переменная. Функция eof возвращает true, если достигнут конец файла, иначе — false.
Например. Чтение из файла с использованием функции eof {rdfromf.pas)
program rdfromf; var
f:text; {файловая переменная}
incom:real; {доход-значение из очередной строки файла}
sum: real; {суммарный доход}
begin
assign(f,'incom.txt’);
{$I-}
reset(f); {откроем для чтения}
if IOResult=0 then begin
sum: =0;
writeln('Чтение данных’);
while not EOF(f) do {пока не достигнут конец файла}
begin
readln(f,incom);
sum: =sum+incom;
end;
close(f);
writeln('Суммарный доход: ' ,sum:ll:2);
end
else writeln('Ошибка открытия файла.');
end.
Обратите внимание: значение eof проверяется перед каждым чтением, в том числе и перед первым. Перед первым чтением eof проверяется, так как хотя открываемый файл может существовать на диске, он может быть пустым (не содержать строк).
Пример 1.
Хоккейные команды "Черные ястребы" и "Красные крылья" хранят в последовательных файлах имена всех своих двенадцати нападающих, число заброшенных ими шайб, сделанных голевых передач и заработанное штрафное время.
• Создайте файлы Black.dat и Red.dat, содержащие информацию о каждой из двух команд.
uses crt;
var
fam:string[10];
s,t:integer;
f,f1:text;
i:integer;
begin
clrscr;
assign(f,'c:\Black.txt');
assign(f1,'c:\Red.txt');
rewrite(f);
rewrite(f1);
for i:=1 to 5 do begin
readln(fam,s,t);
writeln(f,fam:10,s:4,t:4);
end;
for i:=1 to 5 do begin
readln(fam,s,t);
writeln(f1,fam:10,s:4,t:4);
end;
close(f);
close(f1);
end.
Ваша программа по данным, извлеченным из этих файлов, должна создавать новый файл Allstars.dat, в котором содержались бы имя, команда и сумма очков (голы и передачи) для шести лучших игроков обеих команд. Пусть имена и показатели результативности хоккеистов выводятся на экран.