СТРУКТУРА DBF-ФАЙЛА
БАРНАУЛ 1991
СТРУКТУРА ФАЙЛА DBF
Длина | Назначение |
---|---|
32 | Заголовок файла DBF |
n*32 | Дескрипторы полей (количеством n) |
1 | Терминальный байт (ASCII - 10, ПС, LF) |
m*k | Записи с данными (длиной k и количеством m) |
Далее в файле содержатся записи фиксированной длины, информация в которых представлена в коде ASCII. Каждая запись содержит заголовочный байт, - символ пробела (десятичный код ASCII - 32), за исключением заголовочных файлов удаленных записей. Удаленные записи помечаются звездочкой.
Заголовок файла DBF всех версий, начиная с dBASE III, имеет постоянную длину 32 байта (табл. 2).
Адрес | Длина | Назначение | |
---|---|---|---|
0 | 00 | 1 | Битовая карта идентификатора |
1 | 01 | 3 | Дата последней модификации в виде ГГММДД |
4 | 04 | 4 | Число записей в базе |
8 | 08 | 2 | Полная длина заголовка (с дескрипторами) |
10 | 0A | 2 | Длина одной записи |
12 | 0C | 2 | Зарезервировано (всегда 0) |
14 | 0E | 1 | Флаг задержки транзакции (только dBASE IV) |
15 | 0F | 13 | Зарезервировано (всегда 0) |
28 | 1E | 1 | Флаг множественного индекса MDX |
29 | 1F | 3 | Зарезервировано (всегда 0) |
Нулевой байт заголовка имеет структуру битовой карты (табл.3) и содержит номер версии и информацию о состоянии (подключен ли текстовой файл DBT-memo).
Бит | Длина | Назначение |
---|---|---|
0 | 3 | Номер версии файла DBF |
3 | 1 | Флаг DBT (только в dBASE IV) |
4 | 1 | Зарезервировано (всегда 0) |
5 | 2 | Флаг SQL (только в dBASE IV) |
7 | 1 | Флаг DBT (все версии dBASE) |
Следующие три байта содержат шестнадцатеричную дату последнего обновления в формате ГГММДД. После даты расположен счетчик записей (включая удаленные) в виде длинного целого числа без знака (четыре байта). Следующие два байта описывают в виде целого числа без знака совокупную длину заголовка и списка дескрипторов полей. Следующее число без знака определяет длину записей файла. Далее идут два зарезервированных байта и байт, имеющий значение 0-1, определяющий задержку по транзакции (только для dBASE IV). Байты с 15 по 27 зарезервированы. Байт 28 используется только в dBASE IV и указывает, подключен ли к файлу множественный индекс - файл MDX. И, наконец, байты с 29 по 31 также зарезервированы.
Сразу за заголовком следуют дескрипторы полей. Как и заголовок, в версиях выше dBASE II каждый дескриптор имеет постоянную длину 32 байта (табл. 4). Максимальное число дескрипторов на один файл - 255. В Clipper это число достигает 512.
Адрес | Длина | Назначение | |
---|---|---|---|
0 | 00 | 11 | Имя поля |
11 | 0B | 1 | Тип поля (C, L, N, M или F) |
12 | 0C | 4 | Смещение от начала записи до данных поля |
16 | 10 | 1 | Полная длина поля |
17 | 11 | 1 | Число десятичных разрядов |
30 | 1E | 13 | Зарезервировано (всегда 0) |
31 | 1F | 1 | Флаг тэга файла MDX (только в dBASE IV) |
Первые одиннадцать байтов каждого дескриптора содержат имя поля, неиспользованные символы заполняются нулями. В двенадцатом байте указан тип поля (C, L, N, M или F). Следующие четыре байта содержат смещение до данных этого поля от начала любой записи. Шестнадцатый байт описывает длину поля (включая десятичные разряды и десятичную точку), тогда как семнадцатый байт содержит только количество десятичных разрядов. Следующие тринадцать байтов зарезервированы. И, наконец, последний байт дескриптора является флагом тэга многоиндексного файла MDX в dBASE IV и имеет значение 0, если тэга нет, и 1 - если он есть.
Поле дескрипторов отделяется от записей файла терминальным символом - символом перевода строки (код ASCII - 10).
В табл. 5 приведена обобщенная структура записей с данными.
Длина | Назначение |
1 | Заголовочный байт |
n | Данные записи (количество данных n) |