Типизированные файлы

Разновидностью двоичных файлов является типизированные файлы. Это такие файлы, для которых определен формат, или структура файла, а также тип данных для сохраняемой в нем информации.

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

var ByteFile: file of byte;

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

type Country = record

Name: String;

Capital: String;

Population: Longint;

Square: Longint

end;

И далее объявляем файл следующим образом:

var CountryFile: file of Country;

С каждой файловой переменной связан указатель, указывающий на текущую запись, которую можно прочитать или переписать, либо на признак конца файла. Установить указатель в нужное значение можно с помоью процедуру Seek. Нумерация записей в файле начинается с нуля.

Построение базы данных “Адресная книга”

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

Когда программа запускается в первый раз, она определяет, присутствует ли файл данных address.dat. Если такого файла нет, то программа создает файл с таким именем, в котором и хранится вся информация.

AddressFile – это файловая переменная типа Address. AddressData – это переменная типа Address. В такой переменной хранятся фамилия, имя, телефон, адрес и индекс человека.

Address = record

Lastname:string[20];

Firstname:string[20];

Phone: string[15];

StreetAddress:string[50];

Index: string[6];

end;

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

Кнопка Сохранить записывает данные в файл. Кнопки Предыдущая и Последующая позволяют перемещаться назад и вперед по базе данных от одной записи к другую. Кнопка Закрыть позволяет выйти из приложения.

type

Address = record

Lastname:string[20];

Firstname:string[20];

Phone: string[15];

StreetAddress:string[50];

Index: string[6];

end;

var

AddressFile: File of Address;

AddressData: Address;

Fname:String;

RecSize,CurRec:Longint;

procedure TForm1.Button5Click(Sender: TObject);

begin

SaveRecord;

CloseFile(AddressFile);

Application.Terminate;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

ClearData;

CurRec:=0;

Fname:='Address.DAT';

AssignFile(AddressFile,Fname);

RecSize:=SizeOf(AddressData);

if FileExists(Fname) then

begin

Reset(AddressFile);

If not Eof(AddressFile) then

begin

Read(AddressFile,AddressData);

ShowRecord;

end;

end

else

begin

ClearData;

Rewrite(AddressFile);

end;

end;

procedure TForm1.ClearData;

begin

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

Edit4.Text:='';

Edit5.Text:='';

end;

procedure TForm1.SaveRecord;

begin

AddressData.Lastname:=Edit1.Text;

AddressData.Firstname:=Edit2.Text;

AddressData.Phone:=Edit3.Text;

AddressData.StreetAddress:=Edit4.Text;

AddressData.Index:=Edit5.Text;

Write(AddressFile,AddressData);

end;

procedure TForm1.ShowRecord;

begin

Form1.Edit1.Text:=AddressData.Lastname;

Form1.Edit2.Text:=AddressData.Firstname;

Form1.Edit3.Text:=AddressData.Phone;

Form1.Edit4.Text:=AddressData.StreetAddress;

Form1.Edit5.Text:=AddressData. Index;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

SaveRecord;

ShowRecord;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if CurRec-1<0 then

begin

CurRec:=0;

Seek(AddressFile,CurRec);

ShowMessage('Это начало файла');

end

else

begin

CurRec:=CurRec-1;

Seek(AddressFile,CurRec);

Read(AddressFile,AddressData);

Seek(AddressFile,CurRec);

ShowRecord;

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

repeat

CurRec:=CurRec+1;

Seek(AddressFile,CurRec);

until Eof(AddressFile);

ClearData;

SaveRecord;

Seek(AddressFile,CurRec);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

CurRec:=CurRec+1;

Seek(AddressFile,CurRec);

if not Eof(AddressFile) then

begin

Read(AddressFile,AddressData);

Seek(AddressFile,CurRec);

ShowRecord;

end

else

begin

CurRec:=CurRec-1;

Seek(AddressFile,CurRec);

ShowMessage('Это конец файла');

end;

end;

end.

Задание для самостоятельной работы.

Добавить в вышеописаннуюпрограмму возможность удалять записи.

Задание для самостоятельной работы.

Создать СУБД “Наличие товара на складе”. Запись должна содержат следующие поля: наименование товара, количество, стоимость единицы хранения. СУБД должна выполнять следующие оперпации: заносить данные в базу, осуществлять поиск записи по наименованию товара, удалять запись, сообщать по запросу полную стоимость товара на скаладе.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: