надо понимать так: пока не встретился признак конца файла, выполнять цикл.
Пример. Дан файл целых чисел. Посчитать количество положительных, отрицательных и нулевых элементов файла.
program Р1;
const k= 15;
var f: file of integer; a, i, n, p, z: integer;
Begin
assign (f, ‘F.DAT’);
rewrite (f); {создание файла}
writeln (‘введите’, k, ‘целых чисел, после каждого нажимайте ‘);
for i: = 1 to k do
Begin
readln (a);
write (f, a)
end;
close (f); {закрытие файла для операции записи}
{решение задачи — подсчет различных элементов}
n: = 0; p: = 0; z: = 0; {n-отрицательные, р-положительные, z -нули}
reset (f);
while not eof (f) do
Begin
read (f, a);
if a = 0 then z: = z + 1;
if a < 0 then n: = n + 1;
if a > 0 then p: = p + 1
end;
write (‘ n = ‘, n, ‘ z = ‘, z, ‘ p = ‘, p)
End.
Пример. Пусть требуется расширить данный файл, добавив в него новые данные. Как известно, файл с данными нельзя открывать для записи, поэтому для решения подобных задач необходимо использовать вспомогательный файл.
Решение задачи расширения файла складывается из следующих этапов:
1) открыть данный файл f для чтения, а вспомогательный g — для записи;
|
|
2) читать данное из исходного файла f и записывать его тут же в файл g;
3) после окончания переписывания данных закрыть файл f;
4) вводить новые данные с клавиатуры и записывать их в файл g, добавляя к уже имеющимся там данным файла f;
5) закрыть файл g;
6) открыть файл f для записи, а файл g — для чтения;
7) читать данные из файла g и записывать их в файл f.
Таким образом, в файле f к старым данным добавятся новые. Если необходимо вставить новые данные в середину файла, то надо во втором пункте решения контролировать считываемые данные и, дойдя до места вставки, приостановить чтение, записать требуемые данные в файл g, а затем дописать туда оставшиеся из исходного файла (пункты 3 и 4), далее выполнить пункты 5, 6, 7.
program Р2;
var f, g: file of integer; a: integer;
Begin
assign (f, ‘F.DAT’);
assign (g, ‘G.DAT’);.
{перезапись данных из исходного файла во вспомогательный}
reset (f); rewrite (g);
while not eof (f) do
Begin
read (f, a);
write (g, a);
end;
close (f); {добавление данных во вспомогательный файл}
readln (a);
while а <> 0 do {признак окончания ввода новых данных - нуль}
Begin
write (g, a);
readln (a)
end;
close (g);
reset (g);
rewrite (f); {перезапись данных назад в исходный файл}
while not eof (g) do
Begin
read (g, a);
write (f, a);
End
End.