В некоторых случаях, при описании сложных структур данных, могут встретиться описанная типов запись, у которых многие поля совпадают и имеют несколько различных, в том случае удобно бывает использовать записи с вариантной частью или записи с вариантами.
Общий вид записи с вариантом:
Record
<имя поля1>:<тип поля1>;
<имя поля2>:<тип поля2>;
...;
<имя поляN>:<тип поляN>;
Case <sel>:<тип sel> of
<значение1>:(<вариант поля1>:<тип поля1>;
<значение1>:<вариант_поля2>:<тип_поля2>;
………………………;
<значение1>:<вариант поляN>:<тип поляN>;
<значениеN:<вариант поля1>:<тип поля1>;
<значениеN>:<вариант поля2>:<тип поля2>;
……………………………………;
<значениеN>:<вариант поляN>:<тип поляN>;)
end;
где <sel> - идентификатор переменной порядкового типа;
Замечание: обратите внимание на использование конструкции case…of в данном случае. В вариантной части описание типа - запись происходит распределение памяти более, чем для одного списка полей, поэтому доступ к данным может быть осуществлен несколькими способами. В любое время возможен доступ ко всем полям во всех вариантах.
Правило описания вариантной части.
· вариантная часть всегда следует после фиксированной;
· в каждой записи допустима только одна вариантная часть, однако возможны вложения вариантных частей;
· <значение1>...<значениеN> должны описывать все возможные значения sel.
Доступ к полям, описанным в фиксированной части, осуществляется следующим образом:
<id>.<имя поля>,
где <id> - идентификатор типа запись.
Доступ к полям, описанным в вариантной части, осуществляется аналогичным образом с обязательным условием, установки значения поля селектора.
Оператор присоединения позволяет упростить обращение к полям типа запись.
Общий вид:
Width<id Rec> do
begin
...
end;
где <id Rec>-идентификатор типа запись.
В теле оператора Width возможно прямое обращение к полям <id Rec>, указанного в заголовке.
Замечание: если имеется много вложенных операторов Width, то возможно затруднение читабельности программы и ее отладки.
Замечание: размер структуры типа запись определяется как сумма размеров, входящих в нее полей.
Файловый тип состоит из линейной последовательности компонентов(или компонент). Конкретное число компонент не лимитировано(не ограничено). На практике в качестве составных элементов файла выступают записи.
Описание переменной файлового типа.
<имя переменной>.file of <тип>;
где <имя переменной> - идентификатор;
<тип> - любой тип данных кроме файлового или структурированного типа, содержащего как компонент файловый тип;
Если служебное слово of и <тип> данных опущены, то такое описание обозначает нетипизированный файл. Нетипизированные файлы представляют собой расширение для организации ввода/вывода, используемые для доступа к произвольному файлу с произвольным содержимым. В языке Pascal поддерживаются только последовательные файлы, т.е. добавить новую компоненту можно только в конец файла.
Стандартный файловый тип Text определяет файлы, упорядоченные в строки. Текстовые файлы используют специфические процедуры ввода/вывода.