- закрыть созданный файл (Close).
Для доступа к компонентам последовательного файла (например, для просмотра содержимого файла на экране или для обработки компонент в целях включения их в качестве фрагментов в программу обработки каких-либо данных и т.п.) следует:
- присвоить файлу имя (Assign);
- открыть уже существующий файл (Reset);
- считать текущую компоненту из файла в рабочую область памяти (как правило, типа запись со структурой компоненты), (Read);
- выполнить обработку информации (например, вывести на экран поля записи);
- закрыть файл (Close).
Возможны три типа корректировки файла как прямого, так и последовательного доступа:
1. Расширение файла за счет внесения новых компонент.
2. Полная замена содержимого компоненты.
3. Замена каких-либо полей отдельных компонент.
Замена содержимого компонент отдельных записей или замена полей отдельных записей будет рассмотрена в следующем подразделе при изучении корректировки компонент файлов прямого доступа.
Добавление новых записей в файл последовательного доступа выполняется путем записи компонент в конце файла. Маркер конца файла при этом переносится. Естественно, на физическом носителе при этом должно иметься свободное пространство.
Для записи новых компонент в конце имеющегося файла необходимо:
- установить указатель файла за последней компонентой (Seek (FV, File sise (FV)):
- создать в специально выделенной области памяти (как правило записи) новую компоненту;
- записать новую компоненту в файл (write);
Пример. Организовать последовательный файл с именем PRIM bibl.dos в подкаталоге Prim каталога TURBO на диске С, т.е. C:\TURBO\bibl.dos. Компонента должна иметь структуру: индекс книги, порядковый номер экземпляра, фамилию, инициалы первых трех авторов (если их несколько), название книги. Блок создания файла оформить в виде процедуры с именем org. Блок доступа к компонентам файла оформить в виде процедуры с именем obr., а блок корректировки – в виде процедуры с именем Rash.
Program Prim47;
type books=record {базовая запись}
nomer:integer;
avtor:string[16];
nazv:string[30];
index:integer; end;
var bf:file of books; { описать файловую переменную }
rb:books; { участок памяти со структурой }
{ компоненты файла }
procedure org;
begin assign(bf,'C:\TURBO\PRIM\bibl.dos');
Rewrite(bf);
with rb do { работать с записью rb без уточненных имен }
while True do
begin writeln('ввести номер книги');
readln(nomer);
if nomer=9999 then {9999 – признак окончания ввода данных}
Begin close(bf); Exit end;
writeln('ввести имя автора');
readln(avtor);
writeln('ввести название книги');
readln(nazv);
writeln('ввести значение индекса');
readln(index);
write(bf,rb); { записать компоненту из rb в файл }
end; end;
procedure Obr;
Begin Assign(bf,'C:\TURBO\PRIM\bibl.dos');
Reset(bf);
with rb do
while not Eof(bf) do{ выйти из цикла, когда закончится файл }
begin read(bf,rb);
writeln(nomer:5,avtor:16,Nazv:10,index:6); { вывод на экран }
end; Close(bf); end;
procedure Rash;
begin Assign(bf,'C:\TURBO\PRIM\bibl.dos');
Seek(bf,Filesize(bf)); { установить указатель на конец файла }
begin writeln('ввести номер'); readln(nomer);
if nomer=9999 then begin Close(bf);Exit end;
writeln('ввести имя автора'); readln(avtor);
writeln('ввести название книги'); readln(nazv);
writeln('ввести значение индекса'); readln(index);
write(bf,rb); end;end;
BEGIN { основная программа }
Org; Obr; Rash; Obr; readln;
END.
При создании больших программ их части удобно создавать в виде отдельных файлов (объектов), которые затем с помощью директивы компилятора {$i...} можно объединить в одну программу. Это удобно еще и тем, что несколько программистов могут создавать различные программы, что в несколько раз может ускорить процесс их создания.
Создадим ту же программу, что и Prim 47, только пообъектно, тогда процедуру Org запишем в C:\TURBO\Org1.pas, процедуру Obr – в C:\TURBO\Orb1.pas, процедуру Rash – в C:\TURBO\Rash1.pas, а вызывающую (основную программу – в C:\TURBO\Prim. 48, в которой предусмотрим подключение объектов – процедур Org, Obr, Rash к основной программе через директивы компилятора $i.
procedure Org1;
begin
assign(bf,'C:\TURBO\bibl.dos');
if nomer=9999 then
begin close(bf); Exit;
end;
writeln('ввести название индекса');
write(bf,rb);
procedure Obr1;
Assign(bf,'C:\TURBO\bibl.dos');
while not eof(bf) do
Begin read(bf,rb);
writeln(nomer:5,avtor:16,Nazv:10,index:6);
Close(bf);
writeln('нажмите enter'); readln;
procedure Rash1;
begin Assign(bf,'C:\TURBO\bibl.dos');
Seek(bf,Filesize(bf));
begin writeln('введите номер'); readln(nomer);
if nomer=9999 then begin Close(bf);exit end;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26