Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
Утилита для создания таблицы актуализации (IFS)
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 28, January, 2013 02:12

Вниманию сообщества Ирбисоводов предлагается небольшая программа для автоматической генерации таблицы актуализации IFS по имеющейся таблице инвертирования FST.

Утилита предназначена для автоматического приведения в соответствия IFS-файлов после любого обновления FST-файлов.

Утилита выполнена как консольная программа и предназначена для запуска из пакетных заданий (BAT-файлов), например, по системному планировщику.

Программа требует Microsoft.NET Framework 3.5 (можно скачать по адресу http://www.microsoft.com/ru-ru/download/details.aspx?id=22). NET Framework входит в стандартную поставку Windows 7/8 и Windows Server 2008 R2 и может быть установлен посредством апплета Панели управления "Включение компонентов Windows".

СИНТАКСИС: FST2IFS <input> <output>
Например: FST2IFS IBIS.FST IBIS.IFS

Выходной файл (в приведенном выше примере IBIS.IFS) каждый раз перезаписывается утилитой заново. Поэтому, чтобы сохранить его предыдущую версию, переместите или переименуйте его.

В прилагаемом архиве, кроме собственно исполняемого файла утилиты, содержится проект для Microsoft Visual Studio 2008, который позволяет скомпилировать утилиту самостоятельно.

IFS-файлы появились в версии 2012.1 Ирбис 64. Для пользователей более ранних версий ИРБИС 64 или любых версий ИРБИС 32 данная утилита бесполезна.

UPD: исправлена досадная неточность, теперь обрабатываются три варианта ссылки на поле, а не две, как раньше



Редактировано 1 раз. Последний раз 01.10.2013 00:26 пользователем amironov73.

Вложения: fst2ifs.zip (81.7KB)  
Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: Alio (IP-адрес скрыт)
Дата: 28, January, 2013 08:43

Еще не посмотрел, как это работает, - но уже приношу огромную благодарность от лица разработчиков ИРБИС

Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 30, September, 2013 17:26

Огромное Вам спасибо! (Говорю уже как администратор ИРБИС, а не как разработчик.) НО не могли бы Вы приложить бинарник?

PS
Маленькое предложение расширить регулярное выражение до
Regex _itemFinder = new Regex(@"[dvn](\d+)");

Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 01, October, 2013 00:24

Да, буквы "n" там не хватало smiling smiley

Прикрепляю исправленный вариант.

А чем не устраивает EXE-файл в папке Release?



Редактировано 1 раз. Последний раз 01.10.2013 00:28 пользователем amironov73.

Вложения: fst2ifs.zip (81.7KB)  
Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 01, October, 2013 10:16

amironov73 написал(а):
-------------------------------------------------------
> А чем не устраивает EXE-файл в папке Release?

Спасибо, проглядел...

Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: Grievous (IP-адрес скрыт)
Дата: 23, April, 2019 13:04

Если обработать этой утилитой стандартный ibis.fst, то созданный ifs сильно отличается от стандартного.

В штатном ibis.ifs например есть конструкция
/*IBIS_BIB_CARD
1112,0 5 MHL,'/KT=/',&uf('++08,10,101,102,215,300,907,951,955,621,675,691,692,693,910,941,900,920,903,919,908,964,985,999'),/&uf('6ZAGNJ')

В сгенерированном нет выделенного нолика. Он вообще что означает?

Некоторые строки штатного ifs полностью совпадают с аналогичными из ibis.fst
Там нет списка номеров полей через запятую. Например весь раздел /*IBIS_MESH

В других строках штатного ifs встречаются номера, которых опять же нет в формате.

910,920,903,200,461,910 0 (if p(v910)then if v910^A:'4' then |EXU=|v910^H,if &uf('Av920#1'):'NJ' then if v910^h=''then 'EXU='d933,ref(L('I='&uf('Av933#1')),v200^a,". "v923^h,"."v923^i,". "v923^k,"."v923^l,". "v923^m,"."v923^n)fi else/|EXU=|v910^b,if s(v910^h,v910^b)=''then 'EXU=',&uf('Av200^a#1'),if &uf('Av200^a#1')=''then &uf('Av461^c#1')fi fi, fi,fi,fi,|%|d910/)
- вот тут например зачем 903 вставлено? И почему нет 933?

В RELEASE_12_1.doc немного рассказывается про ifs, но там не вижу ответов на мои вопросы.

Где правда?

Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 23, April, 2019 13:28

Grievous написал(а):
-------------------------------------------------------
> Если обработать этой утилитой стандартный
> ibis.fst, то созданный ifs сильно отличается от
> стандартного.
>
> Где правда?

Правда в том, что данная утилита лишь примитивный инструмент, не обладающий никаким интеллектом. Она создаёт "болванку", которую придётся дорабатывать вручную, если в FST используются нетривиальные конструкции, например, &uf('6').

Так что приоритет, несомненно, за "авторскими" строками.

Однако, надо иметь в виду, что авторы ИРБИС - живые люди, и могут допустить тривиальную опечатку, как в приведённом Вами примере. :)

Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: Grievous (IP-адрес скрыт)
Дата: 23, April, 2019 13:52

Спасибо за пояснения. А как понять, опечатка там или так задумано было?

903 <-> 933 очень похоже на опечатку, но тогда эта опечатка живёт там с самого момента создания механизма ifs.

Можно предположить что нолик эквивалентен любому номеру поля.

А строки без списка номеров через запятую индексируются только при полном пересоздании словарей и не меняют словари при обычной актуализации записей.

Re: Утилита для создания таблицы актуализации (IFS)
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 23, April, 2019 14:07

Grievous написал(а):
-------------------------------------------------------
> Спасибо за пояснения. А как понять, опечатка там
> или так задумано было?

Если актуализация записей выдаёт сбои (например, значение в словаре не меняется после редактирования записи), значит, "что-то пошло не так", и в IFS закралась ошибка. После её обнаружения следует обратиться к авторам через форум (что Вы и сделали).

> 903 <-> 933 очень похоже на опечатку, но тогда эта
> опечатка живёт там с самого момента создания
> механизма ifs.

Бывает :)

> Можно предположить что нолик эквивалентен любому
> номеру поля.

Ну да, "0" означает, что меток полей слишком много, чтобы перечислять их все.

> А строки без списка номеров через запятую
> индексируются только при полном пересоздании
> словарей и не меняют словари при обычной
> актуализации записей.

Перенесли из FST и забыли отредактировать. Тоже бывает :)

Вообще, надо иметь в виду следующую особенность ИРБИСа: о мелких проблемах он молчит до тех пор, пока те не превратятся в большие неприятности. :)



Редактировано 1 раз. Последний раз 24.04.2019 02:58 пользователем amironov73.



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.