Попытка чтения необработанного файла базы данных
Я пытаюсь прочитать данные из файла базы данных (которые сотрудники 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 Поддержка