Двоичные типизированные файлы




 

Двоичные файлы содержат информацию, аналогичную по строению информации в оперативной памяти. Чтение и запись двоичных типизированных файлов осуществляется, соответственно, процедурами Read и Write (формы Readln и WriteLn не используется, так как файлы являются двоичными, следовательно, не содержат в себе каких-либо строк). Тип данных, записываемых в файл, должен строго соответствовать типу, заявленному в описании файловой переменной.

Read (<Файловая переменная>, <приемник информации1>,., <приемник информации n>);

Write (<Файловая переменная>, <приемник информации1>,., <приемник информации n>);

В отличие от работы с экраном и текстовыми файлами, в качестве параметра Источник информации должны использоваться переменные. Использование констант недопустимо.

Рассмотрим пример записи в двоичный файл с элементами типа Integer десяти целых чисел, вводимых пользователем с клавиатуры (см. Листинг 198).

 

Листинг 198. Создание двоичного типизированного файла

Program WriteTBinFile;

Uses

Crt;

Var

f: File of Integer; {описание файловой переменной с именем f для работы с двоичными типизированными файлами, элементы которых имеют тип Integer}
I: integer;  
A: integer;  
Begin  
ClrScr;  
Assign(f, ‘numbers.bin’); {сопоставление файловой переменной f файлу с именем numbers.bin, находящемуся в текущем каталоге}
Rewrite(f); {открытие файла, которому сопоставлена переменная f (numbers.bin) для записи}
For i:=1 to 10 do  
Begin  
Write(‘Введите число’);  
Readln(a); {ввод пользователем целого числа}
Write(f, a); {запись введенного числа в файл}
end;  
Close(f); {закрытие файла, которому сопоставлена переменная f}

End.

Теперь прочитаем все десять чисел из файла, созданного программой и выведем их на экран (см. Листинг 199).

 

Листинг 199. Чтение двоичного типизированного файла

Program ReadTBinFile;

Uses

Crt;

Var

f: File of Integer; {описание файловой переменной с именем f для работы с двоичными типизированными файлами, элементы которых имеют тип Integer}
I: integer;  
A: integer;  
Begin  
ClrScr;  
Assign(f, ‘numbers.bin’); {сопоставление файловой переменной f файлу с именем numbers.bin, находящемуся в текущем каталоге}
Reset(f); {открытие файла, которому сопоставлена переменная f(numbers.bin) для чтения}
WriteLn;  
For i:=1 to 10 do  
Begin  
Read(f, a); {чтение числа из файла}
WriteLn(‘Прочитано число: a); {вывод числа, прочитанного из файла}
end;  
Close(f); {закрытие файла, которому сопоставлена переменная f}

ReadKey;

End.

Таким же образом записываются в файл сложные типы данных. Например, создадим файл, каждый элемент которого будет иметь тип данных «запись», состоящий из трех строковых полей (см. листинг 200)

Листинг 200. Запись двоичного типизированного файла с элементами сложного типа данных

Program WriteRecords;

Uses

CRT;

Type

TName = Record

Name: String;

Patronymic: String;

SurName: String;

end; {описание типа данных запись из трёх полей строкового типа}

Var

NameFile: File Of TName;

{описание файловой переменной с именем NameFile

для работы с двоичными типизированными файлами,

элементы которых имеют тип TName}

Name: TName; {описание переменной типа TName}

Begin

ClrScr;

WriteLn (‘Введите фамилию: ’) {вывод строки на экран}
Read (Name. SurName) {чтение строки с клавиатуры}
WriteLn (‘Введите имя: ’) {вывод строки на экран}
Read (Name. Name) {чтение строки с клавиатуры}
WriteLn (‘Введите отчество: ’) {вывод строки на экран}
Read (Name. Patronymic) {чтение строки с клавиатуры}
Assign (NameFile, ‘names. bin’)  

{сопоставление файловой переменной NameFile

файлу с именем names. bin}

Rewrite (NamesFile); {открытие файла для чтения}
Write (NameFile, Name); {запись переменной Name в файл, которомуСопоставлена переменная NameFile}
Close (NameFile); {закрытие файла}
End.

Напомним, что тип файла – это условность, имеющая смысл только в подпрограмме его чтения или записи. Записав файл с элементами типа Integer, можно открыть его как файл с элементами, например, Byte.

Приведём такой пример (см. листинг 201).

 

Листинг 201. Запись и чтение двоичного типизированного файла

Program ReadWriteBin;

Uses

CRT;

Var

B1: File Of Integer;

{описание файловой переменной с именем В1

для работы с двоичными типизированными файлами,

элементы которых имеют тип Integer}

B2: File Of Byte;

{ описание файловой переменной с именем В2

для работы с двоичными типизированными файлами,

элементы которых имеют тип Byte}

V: Byte;

I: Integer;

Begin

Assign (B1, ‘names. bin’);

{сопоставление файловой переменной B1 файлу

с именем names.bin; элементы файла рассматриваются

как элементы типа Integer}

Rewrite(B1); {открытие файла для чтения }
I:= 12000;
Write (B1, I); {запись в файл, которому сопоставлена
переменная NameFile, значения 12000}
Close (B1); {закрытие файла}

ClrScr;

Assign ( B2, ‘names.bin’ );

{сопоставление файловой переменной B2 файлу

с именем names.bin; элементы файла рассматриваются

как элементы типа Byte}

Reset (B2);   {открытие файла для чтения}
Read (B2, V);   {чтение значения переменной V из файла}
Write (V);   {вывод значения переменной V на экран}
Close(B2);   {закрытие файла}

ReadKey;

End.

Приведённый пример вполне корректен с точки зрения языка программирования. В первой её части создаётся файл, содержащий целочисленное значение 12000, занимающее два байта. Далее производится считывание первого байта в переменную V. Однако никакого прикладного значения такая программа не имеет, так как основное правило работы с информацией – информация, записанная в какой–либо форме, должна быть прочитана в той же самой форме. А число, выдаваемое на экран – 224.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: