p align="left"> while True do 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'); Rewrite(bf); with rb do while True do 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; procedure Obr1; begin Assign(bf,'C:\TURBO\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); writeln('нажмите enter'); readln; end; procedure Rash1; begin Assign(bf,'C:\TURBO\bibl.dos'); Reset(bf); Seek(bf,Filesize(bf)); with rb do while True do 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; Работу построим в режиме меню. Program Prim48; label M; type books=record nomer:integer; avtor:string[16]; nazv:string[30]; index:integer; end; Var bf:file of books; rb:books; regim:byte; {$i C:\TURBO\Org1.pas} {$i C:\TURBO\Obr1.pas} {$i C:\TURBO\Rash1.pas} BEGIN M: writeln('введите режим работы'); writeln('1 - создание, 2 - обработка', '3 - расширение, 4 - выход'); readln(regim); case regim of 1:Org1; 2:Obr1; 3:Rash1; 4:Exit; else writeln('неправильно задан режим'); end; goto M; END. Для обеспечения работы с различными именами файлов имя файла вначале запрашивается, а затем передается в процедуры. Таким образом, мы можем создавать несколько файлов, содержащих данные о книгах, их обрабатывать, расширять и т.п. Program Prim49; label M1,M2 ; type books=record nomer:integer; avtor:string[16]; nazv:string[30]; index:integer; end; Var bf:file of books; rb:books; regim:byte; si:char; fl:string; {$i C:\TURBO\Org.pas} {$i C:\TURBO\Obr.pas} {$i C:\TURBO\Rash.pas} BEGIN M1: writeln('где будет храниться файл? диск:\каталог\имя'), readln(fl); M2: writeln('введите режим работы'); writeln('1 - создание, 2 - обработка', '3 - расширение, 4 - выход'); readln(regim); case regim of 1:Org; 2:Obr; 3:Rash; 4:begin writeln('будем ещё работать с файлами? - "Y"'); writeln('или конец работы - любая клавиша'); readln(si); if (si='Y')or(si='y') then goto M1 else HALT; end; else begin writeln('неправильно задан режим'); goto M2; end; end; goto M2; END. Procedure Org2; begin assign(bf, fl); Rewrite(bf); with rb do while True do 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; Procedure Obr2; begin Assign(bf, fl); 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 Rash2; begin assign(bf, fl); Reset(bf); Seek(bf,Filesize(bf)); with rb do while True do 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;
10.5. Файлы произвольного доступа Файлы произвольного доступа используются при наличии зависимости значения какого-либо поля компоненты от ее порядкового номера в файле. Порядковый номер компоненты иногда называют ключом компоненты файла. Организовать файл произвольного доступа можно двумя способами: Создать последовательный файл и обращаться к компонентам по порядковому номеру, трактуя последовательный файл как файл прямого доступа. Создать файл фиктивных (с пустыми полями) компонент, затем загрузить его по ключу фактическими данными. этот способ - создание файла с фиктивными компонентами - называется форматизацией. Пример. Форматировать файл произвольного доступа из 20 компонент c:\turbo\bibl.dos. Структура компонент такая же, как и в Prim 47-49. Оформим алгоритм в виде процедуры form, запишем ее в c:\turbo\form.pas. Procedure form; Begin writeln ('дайте имя форматизируемому файлу');
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
|