Предлагаемый набор модулей предназначен для разработки прогамм,
осуществляющих обработку информации системы по результатам обработки
запроса. Разработка и отладка модулей осуществлялась на компиляторе
Borland C++ ver. 3.1.
    Ваша разрабатываемая программа должна вызываться из МЕНЮ обработ-
ки системы. Для этого в подменю обработки "Разовый запрос","Запрос по
образцу","Строчная запись" или "Результат поиска" необходимо создать
подменю, например: "Спецобработка". Для этого подменю нужно задать
программу предобработки (путем нажатия клавиш Alt+U и затем F10) под
названием STRU_OUT. Эта программа записывает в рабочий директорий сис-
темы всю необходимую информацию для работы разрабатываемой Вами прог-
раммы. В самом меню "Спецобработка" может быть несколько пунктов. Каж-
дый из них должен описывать Вашу программу как внешнюю (тип Е).
    Результаты обработки запроса.
    В результате обработки запроса в системе в рабочий директорий для
каждой базы записывается файл, содержащий список отобранных системных
номеров для этой базы. Имя этого файла образуется как:
    <Рабочий директорий>spsn.<Номер базы в запросе>.
    Для корневой базы в запросе файл системных номеров с количества
отобранных системных номеров(4 байта в двоичном виде). Далее записаны
собственно системные номера. Каждый системный номер представлен в тект-
стовом виде с лидирующими нулями длиной 8 байт. Если для корневой базы
заданы условия на отсылки, то для каждой из связанных
баз формируется файл системных номеров. И этом случае системный номер
сопровождается списком позиций в соответствующих файлах системных номе-
ров. Количество элементов в этом списке равно количеству связанных баз.
Каждый элемент занимает 4 байта в двойчном виде и означает смещение от
начала файла системных номеров, где записана информация об отобранных
системных номерах связанной базы для текущего системного номера корне-
вой базы. Каждый такой список отобранных системных номеров имеет такую
же структуру как и список для корневой базы (4 байта - количество, сис-
темные номера по 8 байт, которые могут сопровождаться списком смещений
в файлах списков системных номеров для связанных баз). Если база не
имеет свзанных баз в запросе, то после системного номера (8 байт) идет
следующий системный номер и т.д. Таким образом в наборе файлов списков
системных номеров записаны результаты поиска по древовидному запросу.
Структура информации для разрабатываемой программы.
     При вызове меню "Спецобработка" (оно может иметь и любое другое
имя) производится запись в рабочий директорий информации о структуре
банка и об обработанном запросе (файл stru). Для получения этой инфор-
мации в разрабатываемой программе необходимо использовать модуль
get_stru(). Этот модуль заполняет структуру bank_stru, описанную в фай-
ле rc.h. По окончании работы с банком необходимо вызвать модуль
free_stru. Для корректного вызова всех модулей включите в программу
строку #include "rc.h". Для доступа к структуре банка и запроса включи-
те строку extern struct BANK_STRU * bank_stru.
     Основные используемые модули:
datopen(i_base) - предназначен для открытия файлов данных базы с номе-
        ром i_base. Может вызываться повторно для одной и той же базы,
        при этом файлы базы данных открываются только один раз.
datclose(i_base) - предназначен для закрытия файлов данных базы с номе-
        ром i_base.
inrec(i_base,&rec,sn) - предназначен для чтения записи с системным но-
        мером sn из базы i_base в запись rec. По окончании работы с rec
        необходимо освободить занимаемую ей память: farfree(rec.addr);
sub_fields(&rec,i_field) - предназначен для определения количества зна-
        чений в поле i_field записи rec. Поля записи и значения полей
        нумеруются начиная с 1.
field(rec,i_field,i_sub_field) - извлекает из записи значение i_sub_fi-
        eld поля i_field. Значение получается в виде символьной строки,
        заканчивающейся нулем(\x0). По окончании работы со значением
        его необходимо освободить с помощью farfree.
decode(sl_num,cod,&decod) - раскодирует код cod в словаре sl_num и по-
        мещает соответствующее ему понятие в decod. Понятие получается
        в виде символьной строки, заканчивающейся нулем(\x0). После ис-
        пользования decod нужно освободить с помощью farfree.
invert - вспомогательный модуль, необходимый для инвертирования значе-
        ния, считанного из файла системных номеров ( 4 байта в двоичном
        виде), который записан в порядке обратном тому, в котором запи-
        сывается long.
      В составе модулей присутствует модуль-пример read_base, считываю-
щий результаты обработки запроса и выводящий на экран все отобранные
записи. На экран выводятся только непустые поля. Значения множественных
полей выводятся каждое с новой строки. Для кодируемых полей выводятся
раскодированные понятия из соответствующих словарей.

a better search result Banner 10000036 85 x 25 v2 Banner 10000005

Hosted by uCoz