Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Система ИРБИС в целом :  ИРБИС Irbis
 
Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 24, October, 2005 14:14

Здравствуйте!
Появилась необходимость немного изменить поле: разбить подполе на 3 части. Но вот при выполнении сценария выборки из словаря возникает проблема. Вот описание подполей:
A
A Фамилия - заголовок описания
0
0
2
,A=,if '***'='470' then v470^a, '^H' v470^h, '^w' v470^w fi

Фамилия и инициалы (через пробел) ИЛИ расширение инициалов (через запятую и пробел)


H
H Инициалы - заголовок описания
0
0
0





W
W Расширение инициалов - заголовок описания
0
0
0

При выборе из ловаря какого-нибудь термина (словарь в подполе ^A) не создаются подполя H и W. Хотя в ibis.fst они заносятся в словарь с такими же пометками. В чем м.б. проблнма?
Заранее спасибо.

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 25, October, 2005 13:41

Покажите строку с квалификатором 470 из Вашей IBIS.FST.
Учтена ли у Вас повторяемость поля 470?


Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 27, October, 2005 13:00

Добавил в 470 поле еще два нобора подполей для ввода инф. об авторах и в ibis.fst написал след.
470 0 if p(470^c) then 'T=', v470^c fi, (if p(v470^a) then '^A' v470^a", "v470^w if a(v470^w) then " "v470^h fi fi/)
470 0 (if p(v470^4) then '^a' v470^4 ", " v470^8 if a(v470^8) then " "v470^6 fi fi/)
470 0 (if p(v470^7) then '^a' v470^7 ", " v470^k if a(v470^k) then " "v470^- fi fi/)

Первый набор (^a,^w,^h) заносится в словарь, а вот вторые две тройки нет.

Но и с первой тройкой есть проблема.
(пусть ^A=ФАМИЛИЯ,^H=ИНИЦИАЛЫ,^W=РАСШИРЕНИЕ ИНИЦИАЛОВ):
Выглядит это в словаре так:
ФАМИЛИЯРЕЦЕНЗ.ДОК. \
"РЕЦЕНЗ.ДОК. \" в IBIS.FST больше нигде не встречается (было одно - но я для эксперимента его удалил). Откуда оно там берется? И почему фамилия, инициалы и расширение не выводятся правильно?



Отправка отредактированного (27-10-05 16:30)

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 27, October, 2005 17:25

Первую строку нужно написать так:
470 0 (|T=|v470^c,|%|d470/), (if p(v470^a) then '^A' v470^a,|, |v470^w, if a(v470^w) then | |v470^h fi fi,|%|d470/)
1. В повторяющихся полях применять повторяющиеся условные литералы (| |, а не " ")
2. Чтобы впоследствии перенос из словаря был корректным, в конце группы нужно поставить |%|d470 (счетчик повторений)

Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 29, October, 2005 14:48

Спасибо.

Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 31, October, 2005 15:45

Переписал формат в соответствии с Вашими рекомендациями:
470 0 (|'T='|, v470^c,|%|d470/), (if p(v470^a) then '^A' v470^a|, |v470^w if a(v470^w) then | |v470^h fi,|%|d470 fi/),(if p(v470^4) then '^a' v470^4 |, | v470^8 if a(v470^8) then | |v470^6 fi,|%|d470 fi/),(if p(v470^7) then '^a' v470^7 |, | v470^k if a(v470^k) then | |v470^- fi,|%|d470 fi/)

Но при сохранении все-таки данные из подполей (например, a, h, w) не заносятся в словарь.

В чем м.б. проблема?

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 31, October, 2005 16:21

Переписали неаккуратно: лишние ' ' внутри | |; в первой скобке первая запятая не нужна (прелитерал от поля не должен отделяться); в других местах наоборот не хватает запятых

Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 31, October, 2005 16:38

Вот исправленный по вашим рекордмендациям вариант, но он все равно не работает:
470 0 (|T=| v470^c,|%|d470/), (if p(v470^a) then '^A' v470^a, |, |v470^w if a(v470^w) then | |v470^h fi,|%|d470 fi/),(if p(v470^4) then '^a' v470^4 |, | v470^8 if a(v470^8) then | |v470^6 fi,|%|d470 fi/),(if p(v470^7) then '^a' v470^7 |, | v470^k if a(v470^k) then | |v470^- fi,|%|d470 fi/)

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 01, November, 2005 18:43

1. Между |T=| и v470^c пробела быть не должно (см. в других местах то же самое)
2. Повторила Вашу ошибку - вместо '^A' должен, по-видимому, стоять префикс словаря авторов 'A='
Попробуйте так:
(|T=|v470^c,|%|d470/),(if p(v470^a) then 'A=' v470^a, |, |v470^w, if a(v470^w) then | |v470^h fi,|%|d470 fi/),(if p(v470^4) then 'A=' v470^4, |, |v470^8, if a(v470^8) then | |v470^6 fi,|%|d470 fi/),(if p(v470^7) then 'A=' v470^7, |, |v470^k, if a(v470^k) then | |v470^- fi,|%|d470 fi/)


Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 02, November, 2005 15:09

Спасибо вам большое! Что-то я сглупил: заблудился в 3 соснах

Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 02, November, 2005 15:30

Но теперь возникла др. проблема: из словаря эти данные (которые теперь успещно в него помещаются) не выносятся при выборе в подполя. Вот пример для первой тройки:
A
A Фамилия 1 - заголовок описания
0
0
2
,A=,if '***'='470' then v470^a, '^H' v470^h, '^w' v470^w fi

Фамилия и инициалы (через пробел) ИЛИ расширение инициалов (через запятую и пробел)


H
H Инициалы 1 - заголовок описания
0
0
0





W
W Расширение инициалов 1 - заголовок описания
0
0
0





Как быть? :)

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 02, November, 2005 15:53

Попробуйте взять в скобки
,A=,(if '***'='470' then v470^a, '^H' v470^h, '^w' v470^w fi.)


Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 02, November, 2005 16:31

Странно. Все равно не помогает

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 02, November, 2005 17:47

Выражение в скобках должно заканчиваться / а не . (моя описка).
Но у Вас термин с квалификатором 470 может сформироваться и будет переноситься и из других подполей поля 470 документа.
,A=,(if '***'='470' then if p(v470^a) then v470^a,'^H'v470^h,'^W'v470^w else if p(v470^4) then v470^4,'^H'v470^8,'^W'v470^6 else if p(v470^7) then v470^7,'^H'v470^k,'^W'v470^- fi fi fi fi/).
Так можно написать, если Ваши тройки подполей взаимоисключающие.
Если же они могут встретиться одновременно в одном и том же поле в документе, то для каждой тройки в словаре авторов (A=) нужно вводить свой квалификатор (например, 4701, 4702, 4703) и в формате переноса привязываться к ним.

Re: Сценарий выборки из словаря
Пользователь: artgonch (IP-адрес скрыт)
Дата: 02, November, 2005 18:00

Что-то странное: скопировал полностью ваш код, но он так и не заработал. Ведь формально все сделано правильно. Можно прислать вам макет РЛ и fst? М.б., при полной картине вы сразу увидите ошибку?

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 02, November, 2005 20:20

Пришлите вместе с парой заполненных записей (формат ISO или TXT)

Re: Сценарий выборки из словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 03, November, 2005 14:58

Все-таки в словаре нужно сделать отдельные строки с разными квалификаторами для "троек" подполей и это отразить в формате переноса в 470.wss
Строки в fst
4701 0 mhl,(if p(v470) then if p(v470^a) then 'A=' v470^a,|, |v470^w,if a(v470^w) then| |v470^h fi fi,|%|d470/),
4702 0 mhl,(if p(v470) then if p(v470^4) then 'A=' v470^4,|, |v470^8,if a(v470^8) then| |v470^6 fi fi,|%|d470/),
4703 0 mhl,(if p(v470) then if p(v470^7) then 'A=' v470^7,|, |v470^k,if a(v470^k) then| |v470^- fi fi,|%|d470/)
Строки в wss
,A=,if '***'='4701' then (if p(v470) then v470^a,'^H'v470^h,'^W'v470^w fi/) else if '***'='4702' then (if p(v470) then v470^4,'^H'v470^8,'^W'v470^6 fi/) else if '***'='4703' then (if p(v470) then v470^7,'^H'v470^k,'^W'v470^- fi/) fi fi fi

P.S.1. Учтите, что по этому формату будут переноситься ФИО ТОЛЬКО из полей 470, но ни из каких других полей (700, 701, 702 и т. д.)
P.S.2. В форматах, которые я предлагала раньше, были ошибки:
в fst нужно было писать не (.... ,|%|d470 fi/), а (... fi,|%|d470/); в wss <if '***'='470' then> должно быть вынесено за скобки



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