Структура DBF-файлів для непросунутих
Структура DBF-файлів для непросунутих
вступ
Все було б добре, якби не BDE.
Ні, BDE - це дуже навіть добре, погано те, що використавши в програмі одного разу TTable, доводиться ламати голову над тим, як же з мінімальними втратами "прикрутити" BorlandDatabaseEngine до користувальницької машині. Це перше, що змушує сісти за вивчення заголовків DBF-файлів. І друге. Ці самі DBF-файли мають таку особливість, як руйнування заголовків. І третє, і четверте, і п'яте.
Для Вас не складно написати компонент, який працює з DBF-таблицями. В цьому випадку НЕГАЙНО припиніть читання статті!
А ми ж подивимося, що з себе представляють заголовки DBF-файлів і як можна використовувати свої знання про них в практичному застосуванні.
- Заголовок
- власне записи
Таблиця 1. Структура DBF-файлу
Завершальний символ 0x1A (26)
RecordSize (розмір запису в байтах) і RecordsCount (кількість записів), значення яких беруться з заголовка DBF-файлу, будуть розглянуті нижче.
Тепер, коли ми знаємо з яких частин складається DBF-файл і який розмір вони мають, перейдемо до більш докладного розгляду їх структури.
Опис заголовка DBF-файлу
Як видно з попередньої таблиці, заголовок складається з трьох частин:- власне заголовок
- опис полів
- завершальний заголовок символ 0x0D (13)
Таблиця 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-файлу ми можемо:- Отримати важливі відомості про DBF-файлі з його перших 32 байтів
- Змінити кілька важливих значень DBF-файлу:
- змінити мовну драйвер таблиці
- відв'язати таблицю від індексного файлу
- за бажанням - ще що-небудь
- Визначити кількість і тип полів в DBF-файлі
- Відстежити руйнування заголовка DBF-файлу шляхом розрахунку місця знаходження завершального заголовок символу і порівняння його з 0x0D (13)
- Спробувати відновити заголовок
- Створити примітивний драйвер роботи з DBF-файлом без BDE
- І багато багато іншого.
невеликий приклад
На додаток до матеріалу: DBFCodePage.zip (1.7K) невеликий перекодировщик (мовної драйвер) ascii ANSI Win 1251 до dBase RUS cp866 і назад.