Skip to Content

Чтение записи из файла

Чтение записи из файла

Рассмотрим программу, демонстрирующую процесс чтения и обработки записей файла. Программа Чтение записей из файла, диалоговое окно которой представлено на рис. 8.4, а текст — в листинге 8.2, открывает файл, сформированный программой Добавление записи в файл, и, в зависимости от того, какой из переключателей все или выбрать — установлен, выводит список медалей, выигранных соответственно представителями всех стран или страны, название которой введено в поле Страна. Для вывода результата чтения из файла используется компонент Memol.

В табл. 8.2 приведены значения свойств компонентов формы.

Так как компонент Memol предназначен только для просмотра информации, то свойству Readonly (только чтение, просмотр) присвоено значение True. Свойство scroiiBars (полосы прокрутки) компонента Memo позволяет задавать отображаемые полосы прокрутки. По умолчанию свойству scroiiBars присвоено значение ssNone, т. е. полосы прокрутки не отображаются. В рассматриваемом примере выводится вертикальная полоса, поэтому свойству ScroiiBars присвоено значение ssVertical.

Таблица 8.2. Значения свойств компонентов

Свойство Значение
RadioButton1 . Checked True
Label1 .Enabled False
ComboBox1 . Enabled False
Memo1 . Readonly True
Memo1. ScroiiBars ssVertical

Для ввода названия страны используется компонент ComboBox1, что позволяет задавать имя не только прямым вводом названия, но и выбором из списка. Список стран нужно сформировать во время создания формы путем присвоения значения свойству items.

Чтобы сразу после запуска программы список выбора страны был недоступен (т. к. выбран переключатель все группы Показать), свойству Enabled компонентов ComboBox1 и Label1 во время создания формы нужно присвоить значение False.

Список ввода-выбора названия страны (ComboBox1) становится доступным в результате выбора во время работы программы переключателя выбрать. Процедура обработки события Onclick на переключателе RadioButton2 делает доступным поле ComboBox1.


Рис. 8.4. Окно программы Чтение записей из файла

Листинг 8.2. Чтение записей из файла

  1. unit rdrec_;
  2. interface
  3.  
  4. uses
  5. Windows, Messages, SysUtils, Classes,
  6. Graphics, Controls, Forms, Dialogs, StdCtrls;
  7.  
  8. type
  9. TForm1 = class(TForm)
  10. RadioButton1: TRadioButton; // переключатель Все
  11. RadioButton2: TRadioButton; // переключатель Выбрать
  12.  
  13. // текст Страна
  14.  
  15. Button1: TButton;
  16. GroupBox1: TGroupBox;
  17. Label1: TLabe1;
  18.  
  19. procedure Button1Click(Sender: TObject);
  20. procedure RadioButton2Click(Sender: TObject);
  21. procedure RadioButton1Click(Sender: TObject);
  22.  
  23. ComboBox1: TComboBox; // комбинированный список
  24.  
  25. // для ввода названия страны
  26.  
  27. Memol: TMemo; // поле вывода записей, удовлетворяющих
  28.  
  29. // условию запроса
  30.  
  31. private
  32. { Private declarations }
  33. public
  34. { Public declarations }
  35. end;
  36.  
  37. var
  38. Form1: TForm1;
  39.  
  40. implementation
  41. {$R *.DFM}
  42.  
  43. procedure TForm1.Button1Click(Sender: TObject) ;
  44. type
  45.  
  46. // тип медали
  47.  
  48. TKind = (GOLD,SILVER,BRONZE);
  49.  
  50. // запись файла
  51.  
  52. TMedal = record
  53.  
  54. country:string[20];
  55. sport:string[20];
  56. person:string[40];
  57. kind:TKind;
  58.  
  59. end;
  60.  
  61. var
  62.  
  63. f: file of TMedal; // файл записей
  64. rec: TMedal; // запись, прочитанная из файла
  65. n: integer; // кол-во записей, удовлетворяющих запросу
  66. st: string[80];
  67.  
  68. begin
  69.  
  70. AssignFile(f,'a:\medals.db');
  71.  
  72. {$I-}
  73. Reset (f); // открыть файл для чтения
  74. {$I-}
  75.  
  76. if IOResult <> 0 then
  77. begin
  78.  
  79. ShowMessage('Ошибка открытия файла БД.');
  80. Exit;
  81.  
  82. end;
  83.  
  84. // обработка БД
  85.  
  86. if RadioButton2.Checked then
  87. Memo1.Lines.Add('*** ' + ComboBox1.Text + ' ***'); n := 0;
  88.  
  89. Memol.Clear; // очистить список поля Memo
  90.  
  91. while not EOF(f) do
  92. begin
  93.  
  94. read(f, rec); // прочитать запись
  95.  
  96. if RadioButton1.Checked or (rec.country = ComboBoxl.Text) then
  97. begin
  98.  
  99. n := n + 1;
  100. st := rec.person+ ', ' + rec.sport;
  101.  
  102. if RadioButtonl.Checked then
  103. st := st + ', '+ rec.country; case rec.kind of
  104.  
  105. GOLD: st := st+ ', золото';
  106. SILVER:st := st+ ', серебро';
  107. BRONZE:st := st+ ', бронза';
  108.  
  109. end;
  110.  
  111. Memo1.Lines.Add(st);
  112.  
  113. end;
  114. end;
  115.  
  116. CloseFile(f);
  117.  
  118. if n = 0 then
  119. ShowMessage('В БД нет запрашиваемой информации.');
  120.  
  121. end;
  122.  
  123. // переключатель Выбрать
  124.  
  125. procedure TForm1.RadioButton2Click(Sender: TObject);
  126. begin
  127.  
  128. Label1.Enabled := True;
  129. ComboBox1.Enabled := True; // теперь поле Страна доступно
  130. ComboBox1.SetFocus; // курсор в поле Страна
  131.  
  132. end;
  133.  
  134. // переключатель Все
  135.  
  136. procedure TForm1.RadioButton1Click(Sender: TObject);
  137. begin
  138.  
  139. Label1.Enabled := False;
  140. ComboBox1.Enabled := False; // теперь поле Страна не доступно
  141.  
  142. end;
  143.  
  144. end.

Процедура TForm1.Button1Click открывает файл и последовательно считывает находящиеся в нем записи. Содержимое записи добавляется в поле Memol, если прочитанная запись удовлетворяет условию запроса, т. е. содержимое поля country совпадает с названием страны, введенным пользователем в поле редактирования компонента ComboBox1, или если выбран переключатель RadioButton1.

Информация в поле Memo добавляется инструкцией Memo1.Lines.Add(st), которая является инструкцией применения метода Add (Добавить) к компоненту Memo1.

Примечание

Понятие "метод" будет подробно рассмотрено далее, в разделе, посвященном объектно-ориентированному программированию. Сейчас только скажем, что метод— это процедура, инструкция вызова которой записывается особым образом с целью показать, что одним из ее параметров является объект.



Delphi Для профессионалов &1   |    Delphi Для профессионалов &2   |    Delphi Для профессионалов &3   |    Иллюстрированный самоучитель &1   |    Иллюстрированный самоучитель &2