Мегаобучалка Главная | О нас | Обратная связь


Assign(booksfile, filname);



2020-02-04 188 Обсуждений (0)
Assign(booksfile, filname); 0.00 из 5.00 0 оценок




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



2020-02-04 188 Обсуждений (0)
Assign(booksfile, filname); 0.00 из 5.00 0 оценок









Обсуждение в статье: Assign(booksfile, filname);

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (188)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)