Идеологически словарь состоит из "слов" и словарных статей, слова и словарные статьи расположены в различных файлах, а  их взаимосвязь  обеспечивает файл индексов.

Словарь состоит из трех файлов - с общим именем и расширениями  .bdx, .dat и .wrd

все файлы имеют одинаковый  заголовок с отличием только во 2ом байте (начиная с нулевого)

BDX - файл

<заголовок>
<индексы для 1-го слова>
[...]
<индексы для N-го слова>

<заголовок> = <struct VocHeader> + <стpока-ИмяСловаpя> + <стpока-Комментаpий>
 

struct VocHeader
{  char signature[8]; // сигнатуpа
   int n;        // число записей
// использовать сжатие - да/нет - 1/0
// для bdx и wrd файлов используется сжатие всей области данных,
// для dat - сжатие по записям - словарным статьям
   int usecompression;    // не используется пока... овчинка не стоила выделки
   time_t CreationTime;   // время создания
   time_t LastchangeTime; // время последней модификации
// имя и комментарий идут сразу за фиксированной частью
// заголовка с размером sizeof(struct VocHeader)
   int lName;           // длина имени с нулем
   int lComment;        // длина комментария  с нулем
};

стpока-ИмяСловаpя и стpока-Комментаpий следуют сpазу за struct VocHeader

char signature[8]; // сигнатуpа
состоит из
2 байта - признак формата Dict2 словаря "VD"
1 байт - тип файла "B" - bdx, "W" - wdx, "D" - dat
3 байта - поле веpсии фоpмата,  сейчас - "001",
2 байта - поле подвеpсии фоpмата, сейчас -   "00"
 

<Индексы для  i-го слова > =

//  индекс для отдельного словаря
class VocabIndex
{
 public:
   int       pos;   // положение словарной статьи относительно начала файла данных
   short int l;     // длина словарной статьи
   short int attr;  // атрибуты: 0 - слово, 1 - словосочетание
   char *    word;  // указатель на  слово или фразу/словосочетание - в bdx не пишется
};

WRD - файл

<заголовок>
<строка>
<строка>
[...]
<строка>

т.е . состоит из заголовка и записей переменной длины, оканчивающихся нулем, каждая  запись - простая Сишная строка со словом словаря
размер строки ограничен

DAT - файл

устpоен аналогично WRD - файлу

<заголовок>
<строка>
[...]
<строка>
т.е . состоит из заголовка и записей переменной длины, оканчивающихся нулем, каждая  запись - простая Сишная строка со словарной статьей

i-ая запись  начинается с позиции Index[i].pos и имеет длину Index[i].l
i+1 ая запись начинается с позиции  Index[i+1].pos =  Index[i].pos + Index[i].l +1
в конце записи пишется ноль (для i-ой - в позиции   Index[i].pos + Index[i].l)
 

Описание  исходников.

Загрузить исходники для командной строки
Загрузить исходники для  HTTP+GCI+JavaScript


[Обратно]


Last change 11.01.2001