Чтобы программа могла сохранить значение переменной-записи в файле или ввести его из файла, надо объявить файл, указав в качестве типа компонентов тип записи (record). Например, инструкции
Type Person=record
F_name:string[20];
L_name:string[20];
Address:string[50];
End;
Var F:file of person;
объявляют файл, компонентами которого являются записи типа person.
После объявления файла, связывания файловой переменной с конкретным файлом (AssignFile), открытие файла (Append,Reset или Rewrite) переменные-записи могут записываться в файл и читаться из файла инструкциями write и read соответственно.
Следующая программа записывает (добавляет) введенные пользователем данные о результатах соревнований в файл. Данные вводятся в поля диалогового окна (рис.22), и сохраняются в файле, компонентами которого являются записи типа TMedal.
Для ввода фамилии спортсмена применяется поле редактирования (компонент Edit). Для ввода названия вида спорта и страны используется компоненты ComboBox (комбинированный список), который позволяет ввести данные либо непосредственно в поле ввода-редактирования, либо путем выбора из списка, который появляется в результате щелчка на кнопке раскрывающегося списка. Список может быть сформирован как в процессе разработки формы приложения, так и во время работы программы. Чтобы сформировать список во время разработки формы, нужно в окне Object Inspector выбрать свойство Items, щелкнуть на кнопке активизации редактора списка строк (кнопка с тремя точками) и ввести элементы списка.
Рисунок 22-Диалоговое окно программы Добавление записи в файл
Ниже приведен листинг модуля формы приложения
unit apprec_;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit; // спортсмен
ComboBox1: TComboBox; // страна
ComboBox2: TComboBox; // вид спорта
RadioGroup1: TRadioGroup; // медаль
Button1: TButton; // кнопка Добавить
Label5: TLabel;
Label4: TLabel;
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// тип медали
TKind = (GOLD, SILVER, BRONZE);
// запись файла
TMedal=record
country: string[20]; // страна
sport: string[20]; // вид спорта
person: string[40]; // спортсмен
kind: TKind; // медаль
end;
var Form1: TForm1;
f: file of TMedal; // файловая переменная
implementation
{$R *.DFM}
// активизация формы
procedure TForm1.FormActivate(Sender: TObject);
var resp : word; // ответ пользователя
begin
AssignFile(f, 'a:\medals.db');
{$I-}
Reset(f); // открыть файл
Seek(f, FileSize(f));// указатель записи в конец файла
{$I+}
if IOResult = 0 then
button1.enabled:=TRUE //теперь кнопка Добавить доступна
else begin
resp:=MessageDlg(‘Файл не найден.'+
'Создать новый',mtInformation,[mbYes,mbNo],0);
if resp = mrYes then
begin
{$I-} rewrite(f); {$I+}
if IOResult = 0
then button1.enabled:=TRUE
else ShowMessage('Ошибка создания файла.');
end;
end;
end;
// щелчок на кнопке Добавить
procedure TForm1.Button1Click(Sender: TObject);
var medal: TMedal;
begin
with medal do
begin
country := ComboBox1.Text;
sport := ComboBox2.Text;
person := Edit1.Text;
case RadioGroup1.ItemIndex of
0: kind := GOLD;
1: kind := SILVER;
2: kind := BRONZE;
end;
end;
write(f,medal);//записать содержимое полей записи в файл
end;
// завершение работы программы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile( f ); // закрыть файл
end;
end.
Файл базы данных для добавления открывает процедура TForm1.FormActivate. Здесь следует обратить внимание на то, как это реализовано. Процедуру Append File, которая открывает файл для добавления в конец, использовать нельзя, т. к. файл не является текстовым. Поэтому файл сначала открывается процедурой Rewrite в режиме перезаписи, а затем процедура Seek устанавливает указатель чтения/записи в конец файла. Параметром процедуры Seek является функция FileSize, значение которой равно размеру файла (в байтах).
Непосредственное добавление записи в файл выполняет процедура TForm1.Button1Click, которая запускается при щелчке на кнопке Добавить (Button1). Поля county и sport добавляемой записи заполняются из свойства Text комбинированных списков Страна (ComboBox1) и Вид спорта (ComboBox2).
Поле person заполняется из поля ввода Спортсмен (Edit1). Значение поля mecal определяется выбранной кнопкой компонента RadioGroup1.
Закрытие файла выполняет процедура TForm1.FormClose.
Так как тип Tmedal используется двумя процедурами (TForm1FormActivate и Tform1.Button1Clik), то его описание помещено в раздел type модуля формы. Объявление файловой переменной f по этой же причине помещено в раздел объявления переменных модуля формы.
В приведенном варианте программы предполагается, что списки стран и названий видов спорта формируются при помощи редактора списка строк во время разработки формы. Вместе с тем, список можно сформировать во время разработки программы. Для этого надо к свойству Items применить метод Add. Например, список стран может быть сформирован при помощи следующих инструкций (их нужно поместить в процедуру Tform1.FormActivate:
Form1.ComboBox1.Item.Add(‘Россия’);
Form1.ComboBox1.Item.Add(‘Австрия’);
Form1.ComboBox1.Item.Add(‘Германия’);
Form1.ComboBox1.Item.Add(‘Франция’);
8.2. Чтение и обработка записей из файла
Следующая программа демонстрирует процесс чтения и обработки записей из файла. Программа Чтение записей из файла, диалоговое окно которой представлено на рис. 23, а текст ниже в листинге, открывает файл, сформированный программой
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.