INDEX (описывает статический индекс для файла)
метка INDEX([-][field])[NAME()][,NOCASE][,OPT]
- | Знак МИНУС перед компонентой индекса означает, что для полей с этой компонентой, индекс сортируется по убыванию (от больших значений к меньшим), по умолчанию сортировка по возрастанию. |
field | Метка поля из структуры RECORD файла, для которого строится индекс. Поле - это компонента индекса. Переменные с атрибутом DIM (массивы) нельзя использовать в качестве индексных полей. |
NAME | Имя файла для индекса. |
OPT | В индекс не попадут сведения о тех записях, у которых все поля, используемые как компоненты индекса, пусты или содержат нуль. |
NOCASE | Сортировку проводить без учета регистра. |
INDEX описывает "статичный" ключ для файла данных. INDEX обновляется только оператором BUILD. Он используется для доступа к записям в порядке, отличном от физического размещения записей в файле. INDEX можно использовать как для последовательного, так и для произвольного доступа к файлу. В INDEX-е ВСЕГДА разрешены записи с одинаковым значением индексных полей (duplicated entries).
INDEX может строиться на основании более чем одного поля. Порядок, в котором заданы компоненты индекса, определяет порядок сортировки записей по этому индексу. Самые первые компоненты МЕНЕЕ значимы, самые последние - БОЛЕЕ. В общем, файл данных может иметь до 255 индексов (и/или ключей) и каждый индекс может быть длиной до 255 байт (имеется в виду суммарная длина всех полей, задействованных для построения индекса), хотя точное число индексных и ключевых файлов зависит от файлового драйвера.
Если в описании INDEX не заданы имена полей, то создается "динамический" индекс, который позволяет использовать любые поля структуры RECORD в качестве своих компонент, за исключением массивов. Такие компоненты задаются во время исполнения вторым параметром оператора BUILD. Такой подход позволяет произвольно индексировать файлы во время исполнения (С.П.А - и позволяет избежать одинаковых, в целом, процедур, использующих разные порядки сортировки одного и того же файла).
Пример:
Names FILE,DRIVER('Clarion'),PRE(Nam)
NameNdx INDEX(Nam:Name),NOCASE !Индекс по имени
NbrNdx INDEX(Nam:Number),OPT !Индекс по номеру
Rec RECORD
Name STRING(20)
Number SHORT
. .
См. также: ,