Лекция "Типизированные файлы"
Оценка 5

Лекция "Типизированные файлы"

Оценка 5
Лекции
docx
информатика
Взрослым
14.03.2017
Лекция "Типизированные файлы"
Типизированные файлы – это файлы, состоящие из нумерованной последовательности объектов (записей) любого типа. С такими файлами можно работать в режиме прямого доступа, при котором выполняется непосредственное об¬ращение к любой записи файла. Каждая запись файла имеет свой номер, начиная с 0 и т.д. Процедуры и функции обработки файлов: 1) Write и Read- записывают и читают информацию из указанного файла и перемещают указатель файла к сле¬дующей записи.
19.2..docx
Пример 1.  Создать текстовый файл, в который записать 3 предложения. Прочитать этот  файл, вывести  его содержимое на  экран. Определить длину каждого предложения. Program File_text; var f1 : text; st : string; n: byte; begin assign   (f1, 'file1.txt'); {связать с файлом file1.txt  файловую переменную f1  }   rewrite  (f1); { создать новый файл  с именем file1.txt } writeln ( f1, 'Очень полезно изучать'); { записать предложения в файл} writeln ( f1, ' всем  студентам '); writeln (f1, ' язык  Pascal '); close (f1);    { закрыть файл для записи } reset (f1); { открыть файл для чтения } while not eof (f1) do { пока не конец файла  f1} begin readln (f1, st);    {читаем строку из файла f1 } writeln(st);         { выводим на экран } n:= length (st);     {определяем длину строки } writeln ('  длина =',n); end; close (f1); { закрыть файл  для чтения} end . Типизированные файлы Типизированные файлы – это файлы, состоящие из нумерованной последовательности  объектов (записей) любого типа. С такими файлами можно работать в режиме прямого  доступа, при котором выполняется непосредственное обращение к любой записи файла.  Каждая запись файла имеет свой номер, начиная с 0 и т.д. Процедуры и функции обработки файлов: 1)  Write и Read­ записывают и читают информацию из указанного файла и перемещают   указатель файла к следующей записи. 2) Seek (файловая переменная, номер записи); процедура перемещения указателя на запись  файла с заданным номером.  3) Truncate (файловая переменная); процедура, усекающая файл по текущей позиции указа­ теля файла, т.е. все записи, находящиеся после указателя файла, удаляются. 4) Функция Filesize (файловая переменная);  имеет тип Integer и определяет размер файла,  т.е. число записей.   5) Функция Filepos (файловая переменная); имеет тип Integer и возвращает текущую  позицию  указателя файла. Для добавления записей в конец файла используются процедуры: Readln (a ); Seek (f, filesize (f)); Write (f, a); При этом указатель устанавливается за конец файла, т.к. нумерация записей начинается с  нуля. После чего с помощью Write можно добавлять записи. Открывать файл можно только процедурой Reset (f). Для того, чтобы в режиме произвольного доступа считать, а затем изменить значение  записи, следует выполнить два вызова процедуры Seek.Один вызов перед операцией Read, а другой ­ перед операцией Write (т.к. Read после чтения записи переместит указатель к сле­ дующей записи). Пример: Cоздать файл  из списка 10 студентов с их оценками ( номер,  Ф.И.О. и три  оценки). Вывести его содержимое на экран, изменить фамилию студента с номером,  введенным с клавиатуры, заново прочитать файл. Program  file;  Type wed  =  record      {Тип wed включает 3 поля: n, fio, bal} n : byte ;       fio : string[15] ; bal : array [1..3] of byte;   {Поле bal – массив из 3 оценок } end; Var    spisok : wed ;       {Запись spicok  типа  wed} sp : file  of wed;  {Файл записей типа wed} procedure vvod;     { процедура создания файла} var    i,j:byte; begin { оператор assing  находится в основной прграмме } rewrite ( sp);            {открытие файла для записи} with spisok do For   i:=1  to  10  do      begin n:=i;                writeln (' Введите фамилию ­  ',  i );    readln (fio);   writeln (' Введите 3 оценки  ', fio );    For  j:= 1 to 3 do  readln ( bal [j] ); write (sp , spisok);     { запись в файл информации о студенте} end; close (sp);      { закрытие файла для записи } end; procedure    print;  { процедура  чтения   и печати всего файла } var    j : byte; begin reset ( sp);               {открытие файла для чтения} writeln (‘                 Список студентов:  ‘);  while not eof (sp) do      with spisok do  begin  Read (sp, spisok);   {чтение данных из файла} write (n,'  ',fio);      {вывод записи на экран} For  j:= 1 to 3 do  write (' ', bal [j] ); writeln ; end; readln; close (sp) ; end; procedure       work; var    num: integer; begin reset ( sp);               {открытие файла для чтения} writeln ('номер= ');    readln (num); seek (sp, num­1); {поиск записи с указанным номером (нумерация записей с 0)} read (sp,spisok);{чтение и перемещение указателя к след. записи} write ('fio='); writeln (spisok.fio); seek (sp,filepos(sp)­1); {возвращение к изменяемой записи } writeln (‘ Введите новую фамилию’  ); readln (spisok.fio); write (sp, spisok);  {запись в файл измененной записи} close (sp); end; begin      {начало основной программы} assign (sp,'Vedom.DAT'); {связать файловую перем­ю  sp с файлом Vedom.dat} vvod;      print; {процедуры создания и чтения файла}      work;   print;   {корректировка и чтение измененного файла} readln end. Нетипизированные файлы ср, 03/13/2013 ­ 12:33 — tech  В Pascal, кроме рассмотренных, существуют также нетипизированные файлы. Они  совместимы со всеми типами файлов и используются тогда, когда тип элементов файла не  важен (например, при копировании). Такие файлы описываются следующим образом: var имя_файла: file; Например, возможно такое описание: var FileOneType: file; Файл без типа представляется как последовательность элементов произвольного типа, но  оговоренного размера. Это значит, что в файл можно записать значение любой переменной,  имеющей заданный размер, а при чтении из такого файла допускается произвольная  интерпретация содержимого очередного элемента. Открываются файлы без типа теми же операторами Reset и Rewrite, но в этом случае  имеется второй параметр — размер записи (элемента файла), заданный в байтах.  Предварительно нужно с помощью оператора Assign связать внутреннее имя файла с  внешним: Assign(FileOneType, 'f.dat');   Reset(fileOneType, 1); Второй параметр операторов Reset и Rewrite может быть опущен, что означает задание  размера записи в 128 байт. Наибольшая скорость обмена данными обеспечивается при  длине записи, кратной 512 байт (размеру сектора на диске). Следует помнить, что если общий размер файла не кратен выбранном размеру записи, то  последняя запись окажется неполной, и файл может быть прочитан не до конца. Этого не  будет, если задать размер записи равным одному байту. Обмен данными при работе с нетипизированными файлами осуществляется с участием  рабочего буфера. В качестве которого используется объявленная в программе переменная.  Ее размер должен быть достаточным для размещения данных, которые читаются  (записываются) за один сеанс чтения (записи). Перед чтением нетипизированный файл должен быть открыт с помощью процедуры Reset, а само чтение осуществляется процедурой BlockRead. BlockRead(имя_файла, переменная_буфер, количество_записей) Третий параметр — это количество записей, читаемых за один раз (тип Word). При выполнении процедуры BlockRead данные помещаются в оперативную память,  начиная с первого байта переменной, указанной в качестве второго параметра процедуры  BlockRead. Поэтому переменная_буфер должна иметь размер, равный произведению,  количества читаемых за один раз записей (третий параметр) и размера записи, заданного в  процедуре Reset. В процедуре BlockRead возможно задание четвертого параметра (тип  Word), в который помещается число фактически прочитанных записей. Запись данных в нетипизированный файл производится только после его открытия с  помощью процедуры Rewrite. Для записи данных используется процедура BlockWrite,  которая имеет те же три (или четыре) параметра, что и BlockRead. При этом в  переменную_буфер нужно предварительно поместить записи. Количество этих записей  должно совпадать со значением третьего параметра процедуры BlockWrite, а размер — со  вторым параметром процедуры Rewrite. В четвертом параметре процедуры BlockWrite  (если он имеется) возвращается количество фактически помещенных в фал записей. Если  на диске нет свободного места, то после выполнения процедуры BlockWrite значения  третьего и четвертого параметров будут отличаться.  Если при чтении с диска окажется, что размер буфера будет меньше указанного выше или  при записи на диск недостаточно свободного места, то при отсутствии четвертого  параметра в процедурах BlockRead и BlockWrite будет зафиксирована ошибка. При  наличии четвертого параметра ошибка не будет сгенерирована.

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"

Лекция "Типизированные файлы"
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
14.03.2017