Схема с использованием второго файла может применяться в следующих случаях:
1) добавление записи в файл –
· в конец файла или
· на заданное место, если файл рассортирован;
2) удаление заданной записи из файла;
3) корректировка заданной записи (изменение значений полей записи и возврат её на прежнее место).
Далее рассматриваются алгоритмы действий ведения файла. При создании пакета ведения типизированного файла рекомендуется выполнить рассматриваемые действия и желательно в той же последовательности. Для работы с текстовыми файлами все эти алгоритмы также применимы, но с учётом особенностей работы с данным типом записей.
Создание файла.
· Запросить у пользователя имя файла на носителе.
· Проверить существование файла с заданным именем. Если файл не существует, то создать его. Если файл существует, то предоставить пользователю решить, перезаписать ли его, т.е. стереть его содержимое и заполнить прежний файл заново или же создать новый файл, но уже с другим именем
|
|
Замечание: эти два действия можно выполнять отдельным «пунктом меню», если технологически это удобнее.
· Открыть файл для записи.
· Организовать цикл для заполнения файла, который продолжать до отказа пользователя от ввода очередной записи. Внутри цикла выполнить следующие действия:
v запросить у пользователя значения полей очередной записи и занести её в файл;
v запросить у пользователя, будет ли ещё запись. Если нет, то выход из цикла, иначе - продолжение процесса заполнения файла записями, т.е. очередное повторение тела цикла.
· После выхода из цикла - закрытие созданного файла.
Примечание. Нежелательно использовать заранее определённое количество записей для записи их в файл.
Пример
Пусть требуется создать файл из записей, данные для которых вводятся с клавиатуры.
Структура записи файла следующая:
- фамилия;
- табельный номер;
- заработная плата.
Program file_1;
Type
tz=record
fio:string[20];
tn:integer;
Zp:real
end;
Var
zap:tz;
fout:file of tz;
fl:boolean;
filename:string;
ans: string;
Begin
{ операторы проверки существования
выходного файла }
Repeat
writeln('введите имя файла на диске');
readln(filename);
assign (fout,filename);
{$i-}
reset (fout);
{$i+}
if ioresult=0
Then begin
{уничтожение сущ-го файла
не допускается}
writeln('файл ', filename,' уже есть');
close(fout);
fl:=false
End
Else begin
{ открытие нового файла для записи }
rewrite(fout);
fl:=true
End
until fl;
{ собственно создание файла }
Repeat
writeln('ввЕдИТЕ фамилиЮ ');
readln(zap.fio);
writeln(' ввЕдИТЕ таб. номер ');
readln(zap.tn);
writeln(' ввЕдИТЕ зарплатУ ');
readln(zap.zp);
write (fout, zap);
writeln('будет ещё запись? (y/ n)');
readln(ans);
until (ans = ‘n’);
close(fout);
End.
Задача 2. Содержимое файла вывести на экран (фрагмент программы).
|
|
...
{ «распечатка» файла }
reset(fout);
Repeat
read(fout,zap);
Writeln(zap.fio:25,
Zap.tn:9,
zap.zp:8:2);
until eof(fout);
close(fout);
...
В процедуре вывода файла на экран («распечатке») тоже можно контролировать, существует ли открываемый файл.