Структура dbf-файлів для непросунутих


Структура DBF-файлів для непросунутих

Структура DBF-файлів для непросунутих

вступ

Все було б добре, якби не BDE.
Ні, BDE - це дуже навіть добре, погано те, що використавши в програмі одного разу TTable, доводиться ламати голову над тим, як же з мінімальними втратами "прикрутити" BorlandDatabaseEngine до користувальницької машині. Це перше, що змушує сісти за вивчення заголовків DBF-файлів. І друге. Ці самі DBF-файли мають таку особливість, як руйнування заголовків. І третє, і четверте, і п'яте.

Для Вас не складно написати компонент, який працює з DBF-таблицями. В цьому випадку НЕГАЙНО припиніть читання статті!
А ми ж подивимося, що з себе представляють заголовки DBF-файлів і як можна використовувати свої знання про них в практичному застосуванні.

DBF-файл складається з двох частин:
  • Заголовок
  • власне записи
Схематично все це можна уявити так:

Таблиця 1. Структура DBF-файлу

Завершальний символ 0x1A (26)

RecordSize (розмір запису в байтах) і RecordsCount (кількість записів), значення яких беруться з заголовка DBF-файлу, будуть розглянуті нижче.
Тепер, коли ми знаємо з яких частин складається DBF-файл і який розмір вони мають, перейдемо до більш докладного розгляду їх структури.

Опис заголовка DBF-файлу

Як видно з попередньої таблиці, заголовок складається з трьох частин:
  • власне заголовок
  • опис полів
  • завершальний заголовок символ 0x0D (13)
Розмір "власне заголовка" становить 32 байта, кожен з яких несе строго певне значення.

Таблиця 2. Структура DBF-заголовка

Завершує опис заголовка символ 0x0D (13)

Тепер уже можна зробити деякі обчислення. Наприклад, визначити кількість полів в DBF-файлі.
Розмір заголовка DBF-файлу в байтах становить:
32 + 32xN + 1 байт, де N - кількість полів.
Цей же розмір можна витягти з 8,9 байтів заголовка - HeaderSize
Отже кількість полів одно:
N: = (HeaderSize-33) / 32 байт.
Змістившись на HeaderSize байт від початку файлу, ми переходимо до безпосередньо до самих записів, розмір яких зазначено в 10,11 байтах заголовка - RecordSize. а їх кількість в 04..07 байтах - RecordsCount.
Структура запису в DBF-файлі простіша.

Структура запису в DBF-файлі

Кожен запис має наступну структуру.

Таблиця 5. Структура записи в DBF-файлі

Прапор видалення "*", інакше - пробіл

Різні типи полів фіксованої довжини
без завершальних символів
довжина поля n визначається в 16 байте структури опису поля.

Завершує DBF-файл символ 0x1A (26)

Таким чином, в загальному випадку запис - це рядок символів (крім FS), що складається з частин (полів) строго певного розміру. Ці розміри вказані в структурі опису поля в 16-м байті.

Тепер, вивчивши будову структури DBF-файлу ми можемо:
  1. Отримати важливі відомості про DBF-файлі з його перших 32 байтів
  2. Змінити кілька важливих значень DBF-файлу:
    • змінити мовну драйвер таблиці
    • відв'язати таблицю від індексного файлу
    • за бажанням - ще що-небудь
  3. Визначити кількість і тип полів в DBF-файлі
  4. Відстежити руйнування заголовка DBF-файлу шляхом розрахунку місця знаходження завершального заголовок символу і порівняння його з 0x0D (13)
  5. Спробувати відновити заголовок
  6. Створити примітивний драйвер роботи з DBF-файлом без BDE
  7. І багато багато іншого.

невеликий приклад

На додаток до матеріалу: DBFCodePage.zip (1.7K) невеликий перекодировщик (мовної драйвер) ascii ANSI Win 1251 до dBase RUS cp866 і назад.