While not eof (f) do

надо понимать так: пока не встретился признак конца файла, выполнять цикл.

Пример.Дан файл целых чисел. Посчитать количество положительных, отрицательных и нулевых элементов файла.

program Р1;

constk= 15;

var f:file of integer; a, i, n, p, z:integer;

Begin

assign (f, ‘F.DAT’);

rewrite (f); {создание файла}

writeln (‘введите’, k, ‘целых чисел, после каждого нажимайте ‘);

fori: = 1tokdo

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);

ifa = 0then z: = z + 1;

if a < 0then n: = n + 1;

if a > 0then 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;

varf, g: file of integer; a: integer;

Begin

assign(f, ‘F.DAT’);

assign (g, ‘G.DAT’); .

{перезапись данных из исходного файла во вспомогатель­ный}

reset (f);rewrite (g);

while noteof (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 noteof (g)do

Begin

read(g, a);

write(f, a);

End

End.