Assign(booksfile, filname);
rewrite(booksfile); with recbooks do Begin write l n ( ' на сколько записей форматировать файл ?'); 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 ; Написать процедуру корректировки файла произвольного доступа в которой будут предусмотрены режимы корректировки: 1. Замена всех полей компоненты. 2. Расширение файла в пределах отформатированного пространства. все это делает процедура Коо 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]; Var stro:text; s:dlina; reg:char; filename:string[12]; {$i c:\turbo\sozdt.pas} {$i c:\turbo\obrt.pas} {$i c:\turbo\rasht.pas} Begin while true do Begin writeln(' укажите режим '); writeln('1: создание, 2: вывод на экран, 3: расширение, 4: выход'); readln(reg); case reg of '1': sozdt; '2': obrt; '3': rasht; '4': halt else writeln(' повторите номер режима '); end;end;end. 11. Использование библиотеки CRT
Разработчики Турбо-Паскаля предусмотрели несколько подпрограмм, существенно увеличивающих возможности текстового ввода-вывода. Эти подпрограммы сосредоточены в библиотеке (модуле) CRT, входящей в комплект поставки Турбо-Паскаля. В модуль включены также процедуры sound, no sound, del a y, позволяющие программировать звуковой генератор компьютера.
11.1. Программирование клавиатуры
Дополнительные возможности управления клавиатурой реализуются двумя функциями: keypressed и ReadKey. Функция keypressed возвращает значение типа boolean, указывающее состояние буфера клавиатуры: false означает, что буфер пуст, а true – что в буфере есть хотя бы один символ, еще не прочитанный программой. В реализуется так называемый асинхронный буферизованный ввод с клавиатуры. По мере нажатия на клавиши соответствующие коды помещаются в особый буфер, откуда они могут быть затем прочитаны программой. Стандартная длина буфера рассчитана на хранение до 16 кодов символов. Если программа достаточно долго не обращается к клавиатуре, а пользователь нажимает клавиши, буфер может оказаться переполненным. В этот момент раздается звуковой сигнал и «лишние» коды теряются. Чтение из буфера обеспечивается процедурами read/rеadln и функцией ReadKey. обращение к функции keypressed не задерживает исполнения программы: функция немедленно анализирует буфер и возвращает то или иное значение, не дожидаясь нажатия клавиши. Функция ReadKey возвращает значение типа char. При обращении к этой функции анализируется буфер клавиатуры: если в нем есть хотя бы один не прочитанный символ, код этого символа берется из буфера и возвращается в качестве значения функции, в противном случае функция будет ожидать нажатия на любую клавишу. Ввод символа с помощью этой функции не сопровождается эхо-повтором и содержимое экрана не меняется. Например, в какой-то точке программы необходимо игнорировать все ранее нажатые клавиши, коды которых еще непрочитаны из буфера, т.е. необходимо очистить буфер. Этого можно достичь следующим способом: Uses CRT ; Var С; char ; Begin while Keypressed do c:== ReadKey; . . . . . End . При использовании процедуры ReadKey следует учесть, что в клавиатурный буфер помещаются так называемые расширенные коды нажатых клавиш. Если нажимается любая алфавитно-цифровая клавиша, расширенный код совпадает с ASCII-кодом соответствующего символа. Например, если нажимается клавиша с латинской буквой «а» (в нижнем регистре), функция ReadKey возвращает значение chr(97), а если – «а» (в верхнем регистре) – значение chr(65). При нажатии функциональных клавиш F1... F 10 (клавиш управления курсором), клавиш I ns, Home, Del, End, PgUp, PgDn в буфер помещается двухбайтовая последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией ReadKey, используется исключительно для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна еще раз обратиться к функции, чтобы прочитать расширенный код клавиши. Следующая простая программа позволит определить расширенный код любой клавиши. Для завершения работы программы нужно нажать клавишу esc. Uses CRT ; Var с : char; Begin repeat c:= ReadKey; if c< >#0 then writeln (ord(c)) Else
Популярное: Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (188)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |