Операции над записями
Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например,
Friend := BestFriend; |
После выполнения этого оператора значения полей записи Friend станут равными значениям соответствующих полей записи BestFriend.
Записи с вариантами
Строго фиксированная структура записи ограничивает возможность ее применения. Поэтому в языке Delphi имеется возможность задать для записи несколько вариантов структуры. Такие записи называются записями с вариантами. Они состоят из необязательной фиксированной и вариантной частей.
Вариантная часть напоминает условный оператор case. Между словами case и of записывается особое поле записи – поле признака. Оно определяет, какой из вариантов в данный момент будет активизирован. Поле признака должно быть равно одному из расположенных следом значений. Каждому значению сопоставляется вариант записи. Он заключается в круглые скобки и отделяется от своего значения двоеточием.
type <имя записи> = record
<список имен полей1>: тип1;
...
<список имен полей…>: тип…;
case <поле признака>: ordinalType of
<список значений1>: (вариант1);
...
<список значений…>: (вариант…);
End,
где <поле признака> - корректный идентификатор, который может принимать значения порядкового типа; ordinalType – идентификатор порядкового типа; <список значений…> - список значений поля признака, разделенных ‘,’; (вариант…) – список имен полей с типами, заключенных в круглые скобки.
Пример описания записи с вариантами:
type TFigure = record X, Y: Integer; case Kind: Integer of 0: (Width, Height: Integer); // прямоугольник 1: (Radius: Integer); // окружностьend; |
Обратите внимание, что у вариантной части нет отдельного end, как этого можно было бы ожидать по аналогии с оператором case. Одно слово end завершает и вариантную часть, и всю запись.
Файлы
Понятие файла
С точки зрения пользователя файл — это именованная область данных на диске или любом другом внешнем носителе. В программе файл предстает как последовательность элементов некоторого типа. Так как размер одного файла может превышать объем всей оперативной памяти компьютера, доступ к его элементам выполняется последовательно с помощью процедур чтения и записи.
Для файла существует понятие текущей позиции. Она показывает номер элемента, который будет прочитан или записан при очередном обращении к файлу. Чтение-запись каждого элемента продвигает текущую позицию на единицу вперед. Для большинства файлов можно менять текущую позицию чтения-записи, выполняя прямой доступ к его элементам.
В зависимости от типа элементов различают три вида файла:
- файл из элементов фиксированного размера; элементами такого файла чаще всего являются записи;
- файл из элементов переменного размера (нетипизированный файл); такой файл рассматривается просто как последовательность байтов;
- текстовый файл; элементами такого файла являются текстовые строки.
Для работы с файлом в программе объявляется файловая переменная. В файловой переменной запоминается имя файла, режим доступа (например, только чтение), другие атрибуты. В зависимости от вида файла файловая переменная описывается по-разному.
Для работы с файлом, состоящим из типовых элементов переменная объявляется с помощью словосочетания file of, после которого записывается тип элемента:
var F: file of TPerson; |
К моменту такого объявления тип TPerson должен быть уже описан (см. выше).
Объявление переменной для работы с нетипизированным файлом выполняется с помощью отдельного слова file:
var F: file; |
Для работы с текстовым файлом переменная описывается с типом TextFile:
var F: TextFile; |
Работа с файлами
Наиболее часто приходится иметь дело с текстовым представлением информации, поэтому рассмотрим запись и чтение текстового файла.
Последовательность при записи в файл:
1. Приступая к работе с файлом, нужно первым делом вызвать процедуру AssignFile, чтобы файловой переменной поставить в соответствие имя файла на диске:
AssignFile(F, 'MyFile.txt'); |
В результате этого действия поля файловой переменной F инициализируются начальными значениями. При этом в поле имени файла заносится строка 'MyFile.txt'.
2. Так как файла еще нет на диске, его нужно создать и открыть для записи:
Rewrite(F); |
3. Теперь запишем в файл несколько строк текста. Это делается с помощью процедур Write и Writeln:
Writeln(F, 'Pi = ', Pi);Writeln(F, 'Exp = ', Exp(1)); |
При работе с файлами первый параметр этих процедур показывает, куда происходит вывод данных.
4. После работы файл должен быть закрыт:
CloseFile(F); |
Последовательность при записи в файл:
Рассмотрим теперь, как прочитать содержимое текстового файла.
1. Инициализация файловой переменной (AssignFile).
2. Файл открывается с помощью процедуры Reset:
Reset(F); |
3. Для чтения элементов используются процедуры Read и Readln, в которых первый параметр показывает, откуда происходит чтение.
4. После работы файл закрывается. В качестве примера приведем фрагмент программы, показывающей последовательно содержимое текстового файла 'MyFile.txt':
uses SysUtils; var F: TextFile; S: string; begin AssignFile(F, 'MyFile.txt'); Reset(F); while not Eof(F) do begin Readln(F, S); Shomessage(S); end; CloseFile(F);end |
Так как обычно размер файла заранее не известен, перед каждой операцией чтения вызывается функция Eof, которая возвращает True, если достигнут конец файла.
Внимание! Текстовые файлы можно открывать только для записи или только для чтения, но не для того и другого одновременно. Для того чтобы сначала записать текстовый файл, а потом прочитать, его нужно закрыть после записи и снова открыть, но уже только для чтения.
Дата добавления: 2016-02-09; просмотров: 1233;