Попытка чтения необработанного файла базы данных

Я пытаюсь прочитать данные из файла базы данных (которые сотрудники c-tree структуры данных). Это очень старый продукт, и по разным причинам драйверы ODBC мне больше не доступны.

Что я обнаружил, так это то, что данные в основном просто построчно "плоский файл". Поэтому я планирую просто прочитать необработанные двоичные данные из файла и, по сути, создать свой собственный ODBC.

Используя инструмент, предоставленный самой компанией c-tree, я даже смог получить подробную информацию о каждом адресе поля (т. Е. Где он начинается), его длине (длине байтового массива) и столбце, который, как я полагаю, на самом деле говорит мне, как поле кодируется (см. ниже):

ADDRESS  LENGTH  TYPE(encoding?)        FIELD NAME
0        8       (128-0x80) CT_ARRAY    Reserved
8        4       (59-0x3B) CT_INT4U     Record_ID
12       2       (41-0x29) CT_INT2U     Type
14       2       (41-0x29) CT_INT2U     Changes
16       52      (144-0x90) CT_FSTRING  Name

Правильно ли я предположить, что что-то вроде "(128-0x80)" должно быть единственной информацией, которая мне нужна для декодирования поля в фактический текст? Или, скорее всего, есть какое-то дальнейшее шифрование, которое я здесь не рассматриваю?

Также кто-нибудь может сказать мне, что именно "(128-0x80)"? Я распознаю 0x80 как гекс, но что означает 128? С, по крайней мере, какой-то терминологией для описания этой вещи, я мог бы сделать еще несколько исследований Google.

Заранее спасибо!

1 ответ

user3063850,

Эта кодировка типа является чисто внутренней как наше представление байтового значения этого типа данных.

Например: 80x (шестнадцатеричное) = 128 (десятичное) = тип данных CT_ARRAY и аналогично для остальных.

АДРЕС ДЛИНА ТИПА (кодировка?) ИМЯ ПОЛЯ

0 8 (128-0x80) CT_ARRAY Зарезервировано

8 4 (59-0x3B) CT_INT4U Record_ID

12 2 (41-0x29) Тип CT_INT2U

14 2 (41-0x29) CT_INT2U Изменения

16 52 (144-0x90) CT_FSTRING Имя

Вы можете просмотреть описания типов данных онлайн в документации: https://docs.faircom.com/doc/ctreeplus/28396.htm

Вероятно, это запись фиксированной длины. Записи переменной длины будут содержать 10-байтовый заголовок для каждого, который необходимо будет учитывать. Кроме того, это выглядит как 1-или 2-байтовая (16-битная прикладная) упакованная выровненная запись данных, которую всегда следует учитывать. Другие выравнивания, определенные компилятором C-структуры, усложнят извлечение данных.

Поле "Зарезервировано" может быть просто меткой-заполнителем для нашей 1-байтовой метки удаленной записи и значения стека удаленных записей (также описанного в нашей документации). Однако он также может содержать специфические данные приложения, относящиеся только к этому приложению, так как его длина составляет 8 байтов.

Не должно быть никакого другого шифрования или кодирования данных (конечно, нет Unicode).

К сожалению, этот драйвер ODBC был прекращен. Для вас есть способ легко извлечь все данные, как это было задумано с базой данных c-treeACE, но вам нужно будет связаться со службой поддержки FairCom для получения дополнительной информации. Ссылка для поддержки - https://www.faircom.com/support.

С Уважением,

FairCom Поддержка

Другие вопросы по тегам