p align="left">readln(filname); assign(booksfile, filname); rewrite(booksfile); with recbooks do Begin writeln ('на сколько записей форматировать файл?'); readln(razmer); for i:=l to razmer do Begin nomer:=i; avtor:=' '; index:=0; nazv:=' '; write ( books file, recbooks) end; end; writeln(фopматизация ',razmer,' запись выполнена'); close(booksflle); end; Напишем процедуру загрузки (procedure zagruz), которая будет заменять поля фиктивных записей реальными значениями, и запишем ее в c:\turbo\zagruz.pas; procedure zagruz; Begin writeln('дать имя загружаемого по ключу файла'); readln(filname); assign(booksfile,filname); reset(booksfile); writeln('сколько записей будете вводить?'); readln(k); with recbooks do Begin for i:=1 to k do Begin writeln('введите номер'); readln(nomer); writeln('введите имя автора'); readln(avtor); writeln('введите название книги'); readln(nazv); writeln('введите индекс'); readln(index); seek(booksfile,nomer-1); { номера компонент начинаются с 0 } write(booksfile,recbooks); end; end; close(booksfile); end; Оформить процедуру прямого доступа по ключу к компонентам файла и выдачу их на экран монитора, записать ее в C:\TURBO\OBRAB.PAS; Procedure Obrab; Begin writeln('дайте имя файла'); readln(filname); assign(booksfile,filname); reset(booksfile); while true do Begin writeln('укажите ключ обрабатываемой записи'); readln(k); if k=9999 then Begin close(booksfile); exit; end; seek(booksfile,k-1); with recbooks do Begin read(booksfile,recbooks); writeln(nomer:5,avtor:16,nazv:15,index:4); end; end; end; Написать процедуру корректировки файла произвольного доступа в которой будут предусмотрены режимы корректировки: Замена всех полей компоненты. Расширение файла в пределах отформатированного пространства. все это делает процедура Кооr, записанная в c:\turbo\koor.pas. Procedure Koor; Var nevavtor:string[16]; nevnazv:string[30]; nevindex:integer; Begin writeln('дайте имя файла'); readln(filname); assign(booksfile,filname); reset(booksfile); with recbooks do Begin writeln('сколько записей будете корректировать?'); readln(k); for i:=1 to k do Begin writeln('дайте номер корректируемой записи'); readln(k1); nevavtor:=' '; nevnazv:=' '; nevindex:=0; writeln('введите имя автора'); readln(nevavtor); writeln('введите название книги'); readln(nevnazv); writeln('введите индекс'); readln(nevindex); avtor:=nevavtor; nazv:=nevnazv; index:=nevindex; seek(booksfile,k1-1); write(booksfile,recbooks); end; end; close(booksfile); end; В программе Prim 50, с помощью меню рассматриваются работа с файлами произвольного доступа во всех режимах; форматирование файла, его загрузка, обработка, корректировка. Здесь следует заметить, что программа универсальна в том смысле, что может работать с различными файлами. Program Prim50; Type books=record nomer:integer; avtor:string[16]; nazv:string[30]; index:integer; end; Var booksfile:file of books; recbooks:books; razmer,k,k1,i,reg:integer; filname:string[12]; {$i c:\turbo\form.pas} {$i c:\turbo\zagruz.pas} {$i c:\turbo\obrab.pas} {$i c:\turbo\koor.pas} Begin while true do Begin writeln('укажите режим'); writeln('1: форматизация'); writeln('2: загрузка по ключу'); writeln('3: обработка по ключу'); writeln('4: корректировка'); writeln('5: выход из программы'); readln(reg); case reg of 1:form; 2:zagruz; 3:obrab; 4:koor; 5:halt; end; end; end. 10.6. Текстовые файлы Компонентами текстовых файлов являются строки. Длина строки - 0-255 символов. Каждая строка завершается маркером строки, а файл - маркером конца файла. Для описания файловых переменных текстового типа используется зарезервированное слово text. Var instrl, instr2: text; dokulnent: text; Для работы с текстовыми файлами используются упомянутые выше функции и процедуры assign, rewrite, reset, close, read, readln, write, writeln, seekeof, однако имеются и специфические функции и процедуры: Append (fv) - открыть текстовый файл и установить указатель на маркер конца файла. Eoln (fv) - возвратить true, если указатель файла достиг маркера конца строки, в противном случае, возвратить значения false. Seekeoln(fv) - функция, аналогичная предыдущей, но указатель проходит все пробелы и знаки табуляции. возвращает true при достижении маркера конца строки. Seekeof(fv) - возвращает true, если указатель файла находится на маркере конца файла. Организация текстового файла производится по схеме: 1) объявляется файловая переменная текстового типа; 2) присваивается файлу имя (assign); 3) открывается файл (rewrite); 4) подготавливается строка - компонента для записи в файл; 5) записывается строка - компонента в файл (writeln); 6) повторяются п. 4, 5 столько раз, сколько нужно; 7) закрывается файл. Доступ к компонентам текстового файла: 1) присвоить файлу имя (assign); 2) открыть файл для чтения (reset); 3) прочитать компоненту-строку (readln); 4) обработать компоненту-строку (например вывести на экран); 5) повторить п. 3, 4 столько раз, сколько нужно. 6) закрыть файл (close); Расширение текстового файла производится путем добавления в конец файла компонент-строк: 1) присвоить имя файлу (assign); 2) установить маркер на конец файла (append); 3) подготовить строку для записи; 4) записать строку (writeln); 5) повторить нужное количество раз п. 3, 4. 6) закрыть файл (close). Замечание. При записи файлов прямого и последовательного доступа, созданных пользователем, содержимое компонент упаковывается, и поэтому посмотреть их в vc или nc по f3 или f4 нельзя, а текстовый файл не упаковывается, и его можно просмотреть. procedure sozdt; Begin writeln('дайте имя создаваемому текстовому файлу'); readln(filename); assign(stro,filename); rewrite(stro); while true do Begin writeln('напишите содержимое строки'); readln(s); if s='zzz' then {'zzz' - признак окончания ввода } Begin close(stro); exit; end; writeln(stro,s); end;end; procedure obrt; Begin writeln('дайте имя обрабатываемого файла'); ; readln(filename); assign(stro,filename); reset(stro); repeat readln(stro,s); writeln(s); until seekeof(stro); close(stro); exit; end; procedure rasht; Begin writeln('укажите имя корректируемого файла'); readln(filename); assign(stro,filename); append(stro); while true do Begin writeln('введите строку'); readln(s); if s='zzz' then Begin close(stro); exit; end; writeln(stro,s); end; end; Program Prim51; Type dlina=string[60];
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
|