|
|
15 июня 2011
устаревающий формат хранения данных, используемый в качестве одного из стандартных способов хранения и передачи информации системами управления базами данных, электронными таблицами и т. д.
Из выпущенных продуктов формат впервые применялся в dBase II в качестве стандартного формата базы. Точно не известно, использовался ли он где-нибудь ранее.
В новых версиях dBase III, dBase IV формат модифицировался и расширялся. В связи с высокой популярностью этих программ были созданы их многочисленные клоны, некоторые из которых использовали модифицированные версии DBF. То же самое происходило и с целым рядом прикладных пакетов и библиотек, использовавших DBF в различных целях. Одни их авторы шли по пути добавления новых типов полей, другие вносили серьёзные расширения. В связи с отсутствием какой-либо официальной стандартизации в настоящее время сложно гарантировать, что разрабатываемая прикладная программа будет писать и читать произвольный DBF-файл, но базовая совместимость всё-таки сохраняется.
DBF-файл делится на заголовок, в котором хранится информация о структуре базы и количестве записей и, собственно, область данных, представляющую собой последовательно организованную таблицу из записей фиксированной длины. Записи, в свою очередь, делятся на поля, также фиксированной длины.
Первое поле всегда пометка удаления. Если оно равно 2A16, считается, что запись помечена на удаление. Удалённые записи могут быть восстановлены или физически удалены при выполнении операции «упаковка».
С DBF-файлами могут быть так же сопряжены другие файлы .DBT, .FPT и, в некоторых случаях, какие-то ещё, предназначенные для хранения больших объектов переменной длины. .DBT/.FPT-файлы не являются самостоятельными и не могут быть прочитаны без соответствующего им .DBF файла. В связи с этим их описание обычно включают в качестве составной части описания формата .DBF.
Структура DBF-файла
DBF-файл состоит из двух частей: заголовок собственно записи
Схематично все это можно представить так:
Кол-во байт |
Наименование |
32 |
Заголовок DBF-файла |
32 |
Описание первого поля |
32 |
Описание второго поля |
... |
... |
32 |
Описание n-го поля |
1 |
Завершающий символ 0x0D |
RecordSize |
Первая запись из n-полей |
RecordSize |
Вторая запись из n-полей |
... |
... |
RecordSize |
m-я запись из n-полей, где m=RecordsCount |
1 |
Завершающий символ 0x1A |
Таблица 1. Структура DBF-файла
Описание заголовка DBF-файла
заголовок состоит из трех частей: собственно заголовок описание полей завершающий заголовок символ 0x0D
Размер "собственно заголовка" составляет 32 байта, каждый из которых несет строго определенное значение.
№ байта |
Размер |
Значение |
Описание |
Используется |
00 |
1 |
0x03 |
простая таблица |
FS, D3, D4, D5, Fb, Fp, CL |
|
|
0x04 |
простая таблица |
D4, D5 |
|
|
0x05 |
простая таблица |
D5, Fp |
|
|
0x43 |
с мемо-полем .dbv |
FS |
|
|
0xB3 |
с мемо-полями .dbv .dbt |
FS |
|
|
0x83 |
с мемо-полем .dbt |
FS, D3, D4, D5, Fb, Fp, CL |
|
|
0x8B |
с мемо-полем .dbt формат D4 |
D4, D5 |
|
|
0x8E |
SQL-таблица |
D4, D5 |
|
|
0xF5 |
с мемо полем .fmp |
Fp |
01 |
1 |
YY |
Год последнего обновления таблицы |
Все |
02 |
1 |
MM |
Месяц последнего обновления таблицы |
Все |
03 |
1 |
DD |
День последнего обновления таблицы |
Все |
04 |
4 |
RecordsCount |
Количество записей в таблице |
Все |
08 |
2 |
HeaderSize |
Размер заголовка в байтах |
Все |
10 |
2 |
RecordSize |
Размер записи в байтах |
Все |
12 |
2 |
0x00,0x00 |
Зарезервировано |
Все |
14 |
1 |
0x01 |
Начало транзакции |
D4, D5 |
|
|
0x00 |
Конец транзакции |
D4, D5 |
|
|
0x00 |
Игнорируется |
FS, D3, Fb, Fp, CL |
15 |
1 |
0x01 |
Закодировано |
D4, D5 |
|
|
0x00 |
Нормальная видимость |
Все |
16 |
12 |
0 Использование многопользовательского окружения |
D4, D5 |
28 |
1 |
0x01 |
Используется индекс |
Fp, D4, D5 |
|
|
0x00 |
Индекс не используется |
Все |
29 |
1 |
n |
Номер драйвера языка |
D4, D5 |
|
|
0x01 |
кодовая страница 437 DOS USA |
Fp |
|
|
0x02 |
кодовая страница 850 DOS Multilang |
Fp |
|
|
0x26 |
кодовая страница 866 DOS Russian |
Fp |
|
|
0x57 |
кодовая страница 1251 Windows ANSI |
Fp |
|
|
0xC8 |
кодовая страница 1250 Windows EE |
Fp |
|
|
0x00 |
игнорируется |
FS, D3, Fb, Fp, CL |
30 |
2 |
0x00,0x00 |
Зарезервировано |
Все |
Таблица 2. Структура DBF-заголовка
Сокращения: FS = FlagShip Fb = FoxBase Fp = FoxPro CL = Clipper D3 = dBaseIII+ D4 = dBaseIV D5 = dBaseV
Структура описания полей в заголовке DBF-файла
№ байта |
Размер |
Значение |
Описание |
Используется |
00 |
11 |
ASCII |
Имя поля с 0x00 завершением |
Все |
11 |
1 |
ASCII |
Тип поля см. Таблицу 4 |
Все |
12 |
4 |
n,n,n,n |
Адрес поля в памяти |
D3 |
|
|
0,0,n,n |
Смещение относительно начала записи |
Fp |
|
|
0,0,0,0 |
Игнорируется |
FS, D4, D5, Fb, CL |
16 |
1 |
Byte |
Размер поля см. Таблицу 4 |
Все |
17 |
1 |
Byte |
Количество знаков после запятой |
Все |
18 |
2 |
0,0 |
Зарезервировано |
Все |
20 |
1 |
Byte |
Идентификатор рабочей области |
D4,D5 |
|
|
0x00 |
Не используется |
FS, D3, Fb, Fp, CL |
21 |
2 |
n,n |
Многопользовательский dBase |
D3, D4, D5 |
|
|
0,0 |
Игнорируется |
FS Fb, Fp, CL |
23 |
1 |
0x01 |
Установленные поля |
D3, D4, D5 |
|
|
0x00 |
Игнорируется |
FS Fb, Fp, CL |
24 |
7 |
0..0 |
Зарезервировано |
Все |
1 |
1 |
0x01 |
Поле включено в .mdx индекс |
D4, D5 |
|
|
0x00 |
Игнорируется |
D3, FS, Fb, Fp, CL |
Таблица 3. Структура описания полей в заголовке DBF-файла
Код |
Тип |
Размер |
Описание/Размер |
Используется |
C |
1..n |
Char |
n ASCII символов |
Все |
|
|
|
пустые места - пробел 0x20 |
Dct |
|
|
|
n = 1..64Kbt |
FS |
|
|
|
n = 1..32Kbt |
Fp, CL |
|
|
|
n = 1..254 |
Все |
D |
8 |
Date |
8 ASCII знаков в формате YYYYMMDD |
Все |
F |
1..n |
Float |
ASCII символы переменная позиция плавающей точки n = 1..20 |
FS, D4, D5, Fp |
N |
1..n |
Numeric |
ASCII символы фиксированная позиция точки |
Все |
|
|
|
n = 1..20 |
FS, Fp, CL |
|
|
|
n = 1..18 |
D3, D4, D5, Fb |
L |
1 |
Logical |
ASCII символы |
FS, D3, Fb, Fp, CL |
M |
10 |
Memo |
10 цифр, определяющих начало блока данных в .dbt-файле или 10 пробелов, если поле мемо пусто |
Все |
V |
10 |
Variable |
Переменная Bin/ASCII данных в .dbv-файле
4 Bin байтов - начало блока в мемо-файле 4 Bin байтов - размер блока 1 Bin байт - подтип данных 1 Bin байт - зарезервировано 0x1A || FS
|
P |
10 |
Picture |
Binary данные в .ftp-файле структура такая же как и в Memo-типе |
Fp |
B |
10 |
Binary |
Binary данные в .dpt-файле структура такая же как и в Memo-типе |
D5 |
G |
10 |
General |
OLE-объекты структура такая же как и в Memo-типе |
D5, Fp |
2 |
2 |
short int |
Binary int max +/- 32767 |
FS |
4 |
4 |
long int |
Binary int max +/- 2147483647 |
FS |
8 |
8 |
double |
Binary signed double IEEE |
FS |
Таблица 4. Типы полей и их размеры
Завершает описание заголовка символ 0x0D
Размер заголовка DBF-файла в байтах составляет: 32+32xN+1 байт, где N - количество полей. Этот же размер можно извлечь из 8,9 байтов заголовка - HeaderSize Следовательно количество полей равно: N:=/32 байт.
Сместившись на HeaderSize байт от начала файла, мы переходим к непосредственно к самим записям, размер которых указан в 10,11 байтах заголовка - RecordSize , а их количество в 04..07 байтах - RecordsCount .
Структура записи в DBF-файле
Каждая запись имеет следующую структуру.
№ байта |
Размер |
Описание |
Используется |
Текст ячейки |
Текст ячейки |
Текст ячейки |
Текст ячейки |
0 |
1 |
Флаг удаления "*", иначе - пробел |
Все |
1 |
1..n |
Различные типы полей фиксированной длины без завершающих символов длина поля n определяется в 16 байте структуры описания поля |
Все |
Завершает DBF-файл символ 0x1A
Таким образом, в общем случае запись - это строка символов, состоящая из частей строго определенного размера. Эти размеры указаны в структуре описания поля в 16-м байте.
Просмотров: 1863
|