Ниже приводяся структуры .DBF-файлов для таблиц dBASE. Представлены структуры файлов для различных версий dBASE: dBASE III PLUS 1.1, dBASE IV 2.0, dBASE 5.0 под DOS и dBASE 5.0 для Windows.
| Заголовок табличного файла | ||
|---|---|---|
| Байт | Содержание | Описание |
| 0 | 1-й байт | Определение наличия MEMO-файла в таблице dBASE III PLUS (03h без MEMO-файла (.DBT-файл;) 83h с MEMO-файлом). |
| 1-3 | 3 байта | Дата последнего обновления в формате YYMMDD |
| 4-7 | 32-битное число | Количество записей в таблице |
| 8-9 | 16-битное число | Количество байтов, занимаемых заголовком |
| 10-11 | 16-битное число | Количество байтов, занимаемых записью |
| 12-14 | 3 байта | Зарезервированная область |
| 15-27 | 13 байт | Зарезервировано для сетевой версии dBASE III PLUS |
| 28-31 | 4 байта | Зарезервированная область |
| 32-n | 32 байта | Массив с описаниями полей (структура каждого такого описания показана ниже) |
| n+1 | 1 байт | Хранится значение 0Dh, выполняющее роль терминатора описаний полей |
n – последний байт массива с описаниями полей. Размер массива зависит от количества полей в табличном файле.
| Описание поля таблицы | ||
|---|---|---|
| Байт | Содержание | Описание |
| 0-10 | 11 байт | Имя поля в ASCII (заполнено нулями). |
| 11 | 1 байт | Тип поля в ASCII (C, D, L, M или N) |
| 12-15 | 4 байта | Адрес данных поля (ссылка на память, а не на диск) |
| 16 | 1 байт | Размер поля в бинарном формате |
| 17 | 1 байт | Порядковый номер поля в бинарном формате |
| 18-19 | 2 байта | Зарезервировано для сетевой версии dBASE III PLUS |
| 20 | 1 байт | ID рабочей области |
| 21-22 | 2 байта | Зарезервировано для сетевой версии dBASE III PLUS |
| 23 | 1 байт | Флаг установки поля |
| 24-31 | 1 байт | Зарезервированная область |
Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 20h (пробел) указывает что запись не удалена, значение 2Ah (звездочка) – запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (1Ah). Вы можете ввести данные в кодовой странице OEM как показано ниже.
| Допустимый тип данных таблиц dBASE | |
|---|---|
| Тип данных | Возможные значения |
| C (Символы) | Все символы кодовой страницы OEM |
| D (Дата) | Числа и символ-разделитель для месяца, дня и года (внутренний формат записи – 8 цифр в формате YYYYMMDD) |
| N (Числовой) | – . 0 1 2 3 4 5 6 7 8 9 |
| L (Логический) | ? Y y N n T t F f (? – не инициализировано) |
| M (Мемо) | Все символы кодовой страницы OEM (внутренний формат записи – 10 цифр, содержащих номер .DBT-блока) |
MEMO-поля хранят данные в .DBT-файлах, состоящих из перечисляемых последовательных блоков (0, 1, 2 и т.д.). Размер блока равен 512 байт. Первый блок в .DBT-файле (нулевой блок) – заголовок .DBT-файла.
MEMO-поле каждой записи .DBF-файла содержит номер (значение указывается в кодовой странице OEM), указывающий на блок с хранимыми данными. Если поле не содержит никаких данных, .DBF-файл будет заполнен пробелами (20h) (а не числами).
В случае изменения данных какого-либо поля, блоки могут изменить свои порядковые номера для отображения новой позиции данных в .DBT-файле.
Данная информация взята из руководства по использованию dBASE III Plus ("Using dBASE III PLUS", Appendix C).