| TYPE
| CharArrayType = Array [1..4] of Char;
| VAR
| V4 : RECORD
| case Boolean of
| True : ( С : CharArrayType );
| False : ( B1, B2, B3, B4 : Byte );
| END;
Размер переменной V4 — четыре байта (оба варианта равны). Обращение к V4.C — это обращение к массиву из четырех символов к V4.C[1] — к первому элементу этого массива. Но одновременно можно обратиться и к ASCII-кодам элементов V4.C[1], V4.C[2], .... V4.C[4], используя поля V4.B1, V4.B2 V4.B4.
Переменная типа «запись» может участвовать только в операциях присваивания. Но поле записи может принимать участие во всех операциях, применимых к типу этого поля. Для облегчения работы с полями записей в языке вводится оператор присоединения. Его синтаксис таков:
WITH ИмяПеременной_Записи DO Оператор;
Внутри оператора (он может быть и составным) обращение к полям записи уже производится без указания идентификатора самой переменной:
| VAR
| DemoRec : RECORD X,Y : Integer END;
| ...
| WITH DemoRec DO
| BEGIN
| X:=0; Y:=120
| END; {with}
Внутри области действия оператора WITH могут указываться и
- 141 -
переменные, не имеющие отношения к записи. Но в этом случае надо следить, чтобы они не совпадали по написанию с полями записи (рис. 7.1).
| >PROGRAM MAIN;
| VAR
| >X, Y : Integer;
| >RecXY : RECORD X,Y: Integer END;
| BEGIN
| >X:=10; Y:=20; { значения переменных X и Y }
| >WITH RecXY DO BEGIN { работаем с записью RecXY }
| >X := 3.14*X; { Где какой X и Y ? }
| >Y := 3.14*Y
| >END; {with}
| >...
| END.
Рис. 7.1
На рис. 7.1 действия внутри оператора WITH проводятся только над полями записи RecXY. Чтобы сохранить оператор WITH и «развязать» имена X и Y, надо к переменным X и Y приписать так называемый квалификатор — имя программы или модуля (UNIT), в которой они объявлены (для этого программа должна иметь заголовок). Так, оператор присоединения с рис. 7.1 можно исправить следующим образом:
| WITH RecXY DO
| BEGIN
| X := 3.14*Main.X;
| Y := 3.14*Main.Y
| END;
и проблема исчезнет.
В случае, если одно из полей записи само является записью (и снова содержит поля-записи), можно распространить оператор присоединения на несколько полей вглубь, перечислив их через запятую. Но в этом случае внутри тела оператора можно обращаться только к последним полям:
WITH ИмяЗаписи, Поле_3апись Do
BEGIN
Обращения к именам полей Поля_3аписи,
т.е. к тем, которым предшествовала конструкция
ИмяЗаписи.Поле_3апись.
END; {with}
- 142 -
Так как записи естественным образом отражают табличную форму хранения данных, они очень удобны для различных приложений — от бухгалтерских задач до системного программирования.