Чтение записей из файла
Листинг 8.2. Чтение записей из файла
unit rdrec_;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
RadioButton1: TRadioButton; // переключатель Все
RadioButton2: TRadioButton; // переключатель Выбрать
// текст Страна
Button1: TButton;
GroupBox1: TGroupBox;
Label1: TLabe1;
procedure Button1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
ComboBox1: TComboBox; // комбинированный список
// для ввода названия страны
Memol: TMemo; // поле вывода записей, удовлетворяющих
// условию запроса
private
{ Private declarations } public
{ Public declarations } end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject) ;
type
// тип медали
TKind = (GOLD,SILVER,BRONZE);
// запись файла
TMedal = record
country:string[20]; sport:string[20];
person:string[40]; kind:TKind;
end;
var
f: file of TMedal; // файл записей
rec: TMedal; // запись, прочитанная из файла
n: integer; // кол-во записей, удовлетворяющих запросу
st: string[80];
begin
AssignFile(f,'a:\medals.db');
{$I-}
Reset (f);
// открыть файл для чтения
{$I-}
if IOResult <>
0 then begin
ShowMessage('Ошибка открытия файла БД.');
Exit;
end;
// обработка БД
if RadioButton2.Checked then
Memo1.Lines.Add('*** ' + ComboBox1.Text + ' ***');
n := 0;
Memol.Clear; // очистить список поля Memo
while not EOF(f) do begin
read(f, rec);
// прочитать запись
if RadioButton1.Checked or
(rec.country = ComboBoxl.Text) then begin
n := n + 1;
st := rec.person+ ', ' + rec.sport;
if RadioButtonl.Checked then
st := st + ', '+ rec.country; case rec.kind of
GOLD: st := st+ ', золото';
SILVER:st := st+ ', серебро';
BRONZE:st := st+ ', бронза';
end;
Memo1.Lines.Add(st);
end;
end;
CloseFile(f);
if n = 0 then
ShowMessage('В БД нет запрашиваемой информации.');
end;
// переключатель Выбрать
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Label1.Enabled := True;
ComboBox1.Enabled := True; // теперь поле Страна доступно
ComboBox1.SetFocus; // курсор в поле Страна
end;
// переключатель Все
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Label1.Enabled := False;
ComboBox1.Enabled := False; // теперь поле Страна не доступно
end;
end.
Процедура TForm1.Button1Click открывает файл и последовательно считывает находящиеся в нем записи. Содержимое записи добавляется в поле Memol, если прочитанная запись удовлетворяет условию запроса, т. е. содержимое поля country совпадает с названием страны, введенным пользователем в поле редактирования компонента ComboBox1, или если выбран переключатель RadioButton1.
Информация в поле Memo добавляется инструкцией Memo1.Lines.Add(st), которая является инструкцией применения метода Add (Добавить) к компоненту Memo1.
Примечание
Понятие "метод" будет подробно рассмотрено далее, в разделе, посвященном объектно-ориентированному программированию. Сейчас только скажем, что метод— это процедура, инструкция вызова которой записывается особым образом с целью показать, что одним из ее параметров является объект.