Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Файлы.doc
Скачиваний:
5
Добавлен:
12.11.2019
Размер:
517.12 Кб
Скачать

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

Двоичные файлы содержат информацию, аналогичную по строению информации в оперативной памяти. Чтение и запись двоичных типизированных файлов осуществляется, соответственно, процедурами 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.