Многомерные массивы. Строки. Ввод и вывод данных в текстовый файл. Создание и повторное использование подпрограмм. Записи. Ввод и вывод записей в файл

Страницы работы

Фрагмент текста работы

Чтобы программа могла сохранить значение переменной-записи в файле или ввести его из файла, надо объявить файл, указав в качестве типа компонентов тип записи (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, а текст ниже в листинге, открывает файл, сформированный программой

Похожие материалы

Информация о работе