Интернет магазин китайских планшетных компьютеров



Компьютеры - DBF

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-м байте.



Просмотров: 1829


<<< Cue sheet
Dirac >>>