Бинарный файл что это

бинарный файл что это

22. Записи. Бинарные файлы

Как и массивы, записи относятся к составным типам данных. Запись состоит из фиксированного числа элементов, называемых полями. Каждое поле представляет собой объект простого типа данных -- как правило, строку или число. Существенно то, что в одну запись могут входить поля различного типа, в отличие от массива, все элементы которого однотипны. Например, записью можно считать строку экзаменационной ведомости:

Борисова Ю.А.     4    5    5

Данная запись состоит из четырех полей: одно поле -- строко вого типа (фамилия и инициалы студента), остальные три поля -- числовые (оценки студента по трем дисциплинам).

Описанию переменной типа запись предшествует определение типа с помощью оператора type. Для нашей записи это описание могло бы выглядеть следующим образом:

type zap = record

fam: string;

m, inf, h: integer;

end;

Здесь zap -- имя нового типа данных, а fam. m. inf и h -- имена полей записи. Служебные слова record. end в данном случае играют роль операторных скобок, внутри которых записываются поля записи с указанием их типов.

Не очень удобно то, что для каждой дисциплины введено отдельное поле. Введем тип данных student. где эта проблема решена использованием в качестве поля массива balls (баллы студента по трем дисциплинам):

type student = record

fam: string;

balls: array [1..3] of integer;

end;

После сделанного таким образом определения в разделе описания переменных можно объявить переменную типа "запись":

var str. student ;

или массив таких переменных:

var students: array [1..20] of student;

Для обращения к отдельным полям переменной типа запись используется селектор записи -- символ точки, разделяющий наименования записи и поля:

str. fam

- обращение к полю "фамилия" записи str ;

students [1]. fam

- обращение к полю "фамилия" первого элемента массива записей students ;

students [ i ]. balls [2]

- вторая оценка i- го элемента массива записей students.

С полем записи, как и с элементом массива, разрешены все допустимые в языке операции над переменной соответствующего типа.

Для того чтобы узнать объем в байтах, занимаемый записью в оперативной памяти или на жестком диске, следует воспользоваться стандартной функцией sizeof. передав ей в качестве аргумента имя типа записи:

sizeof ( student ) -- вернет размер памяти в байтах, занимаемый одной записью типа student.

Чаще всего записи используются при работе с базами данных, хранящимися на жестком диске. Мы уже умеем читать и записывать текстовые файлы, но хранение записей в текстовом файле, как правило, неудобно и требует каждый раз сложного разбора прочитанных строк. Поэтому для эффективной работы с файлами записей следует познакомиться с остальными типами файловых переменных Паскаля.

В общем виде файл данных в Паскале представляет собой совокупность однотипных компонент. В зависимости от способа объявления файловой

переменной можно выделить три вида файлов.

· Типизированные файлы. Для них тип компонент указывается непосредственно в описании файловой переменной. Описание в этом случае имеет вид: var файловая_переменная: file of тип_компонент_файла;

Например, если компоненты файла имеют тип записи zap. то разделе описания переменных можно объявить файловую переменную следующим образом:

var f: file of zap;

Естественной "порцией данных" для такого файла будет одна запись типа zap. что очень удобно. Типизированный файл может быть объявлен и как совокупность записей простого типа:

var f2: file of real;

Здесь объявлен файл, содержащий вещественные числа во внутреннем представлении. Размер одной записи такого файла будет равен 6 байт (размер памяти, отводимый под величину типа real ).

· Нетипизированные файлы. Задаются стандартным типом file без указания типа компонент, например:

var f. file ;

Чтение и запись данных в такой файл может осуществляться произвольными "порциями" данных, что удобно, например, при организации временных и буферных файлов. Рассмотрение нетипизированных файлов выходит за рамки нашего курса.

· Текстовые файлы. Знакомые нам по гл. 21 текстовые файлы задаются стандартным типом text. например:

var f. text ;

Компонентами текстового файла являются строки переменной длины. После ввода каждой строки нажимается клавиша Enter. Исторически сложилось так, что при этом в конец каждой строки дописывается два невидимых символа: символ с кодом 13 ( CR. возврат каретки) и символ с кодом 10 ( LF. перевод строки). Доступ к строкам осуществляется последовательно, начиная с первой. Число строк в текстовом файле может быть произвольным. Последним символом файла может быть специальный маркер EOF ( E nd Of File) с кодом #26.

Существенно подчеркнуть то, что первый и второй вид файлов -- бинарные. а не текстовые:

Текстовый файл содержит только алфавитно-цифровые символы и ряд специальных (такие, как возврат каретки, перевод строки, табуляция). Содержимое файла непосредственно доступно для чтения в любом редакторе текста или в окне консоли.

Бинарный файл содержит произвольные символы, чаще всего он представляет собой набор данных в машинном коде и недоступен для непосредственного чтения.

Например, следующая несложная программа объявляет бинарный файл, состоящий из вещественных чисел и записывает в него числа от 1 до 10 включительно:

var f:file of real; r:real;

begin

assign (f,'real.dat');

rewrite (f);

r:=1;

while r<11 do begin

write (f,r); r:=r+1;

end;

close (f);

end.

Так как размер величины типа real в памяти равен 6 байтам, полученный файл real. dat будет иметь размер 60 байт и содержать внутренние машинные представления указанных чисел (рис. 22.1).

Рис. 22.1. Бинарный файл

Никакого "текстового" смысла в этой записи нет, чтобы ее интерпретировать, нужно открыть файл в редакторе, поддерживающем 16-ричное "машинное" представление чисел или дамп (рис. 22.2).

Рис. 22.2. Шестнадцатеричный дамп бинарного файла

Источник: pers.narod.ru

Категория: Форекс и биржа

Похожие статьи: