Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис    FTP-сервер
Задачки для любознательных :  ИРБИС Irbis
 
Разбить заглавие на несколько маленьких
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 17, October, 2011 22:52

Написать задачку сподвиг один из пользователей, которому нужно, к примеру, заглавие
Объект 212. Мокрый размол. Мельница подслащения (v200^a)
разбить на
Объект 212
Мокрый размол
Мельница подслащения

в словарь Название/Заглавие.
Каким образом это можно сделать?

Re: Разбить заглавие на несколько маленьких
Пользователь: Gena (IP-адрес скрыт)
Дата: 18, October, 2011 18:06

Тут вопрос не совсем правильно стоит. Судя по тексту - это сборник без общего заглавия. Его неправильно описывают, вот и получают три заглавия одной строкой. Пусть пользуются полем 922 для второго и последующих заглавий, если это сборник без общего заглавия, или отдельными полями 330, если есть общее заглавие, но хочется еще и по отдельным заглавиям поиск иметь. А средствами форматирования без ГБЛ вы его не разобъете. Можно с помощью сторонних ДЛЛ получить функцию разбиения текста по некому разделителю и решить вашу проблему. Я себе такую функцию недавно дописывал. Но хочу еще раз сказать, что в данном случае пытаются устранить следствие, а не решить причину - причина в неправильном вводе.

AVD System, Техническая поддержка, [www.open4u.ru]

Re: Разбить заглавие на несколько маленьких
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 18, October, 2011 23:48

Если говорить про разбиение на строки по разделителю, то она сделана и называется split в библиотеке ex64, которую я веду и которая описана в ветке разработок

Re: Разбить заглавие на несколько маленьких
Пользователь: Konstantinus (IP-адрес скрыт)
Дата: 19, October, 2011 13:33

Гена, а если книга (роман) условно называется "Год 1941. Приключения солдата Иванова.", то по поиску заглавия "Приключения солдата Иванова." ничего не даст, а поля 922 и 330 тут не подойдут.

Re: Разбить заглавие на несколько маленьких
Пользователь: Gena (IP-адрес скрыт)
Дата: 19, October, 2011 13:49

Костя, правое усечение термнов в Ирбисе не реализовано, вносить заведомо неверные данные (а укороченное заглавия таковыми и будут) не правильно, а по правилам каталогизации указывается что данные должны быть в том виде, в котором они представленны на документе. Если упираться в то, что такой поиск все же должен быть, то надо использовать нечто на подобии "Нехарактерное заглавие", "Разночтения заглавия". Суть в том, что сейчас это действительно разные заглавия, а не одно сложное.

AVD System, Техническая поддержка, [www.open4u.ru]



Редактировано 1 раз. Последний раз 19.10.2011 13:49 пользователем Gena.

Re: Разбить заглавие на несколько маленьких
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 19, October, 2011 20:44

Гена, не соглашусь с вами.
"Нехарактерное заглавие" следует применять для многотомных изданий, а "Разночтение заглавие", когда, например, на титульном листе одно заглавие, а на корешке или обложке другое.
Ребята, задачка заключается не в том, что это нужно ли реализовывать, а как это реализовать. Проблема может заключаться в том, что каталогизаторы не зная как правильно описывать документы, но создали огромный массив записей. И теперь проблема в поиске по словарю Заглавие/Название. Как вариант, можно заглавие разбить на составляющие заглавия.

Re: Разбить заглавие на несколько маленьких
Пользователь: Gena (IP-адрес скрыт)
Дата: 20, October, 2011 11:09

И разве это будет правильно? Во-первых, при таком разбиение все равно будут огрехи в тех случаях, которые разбивать не нужно было, во-вторых - никакой воспитательной работы и качество каталога начинает стремительно падать. Проверил трехлетними уступками своим каталогизаторам и доделкой вот таких примочек. В конце концов вылилось таким боком, что делать не по инструкции зарекся раз и на всегда. Будет только хуже. Есть проблемные записи? Надо их редактировать. Есть необученные сотрудники - надо вести их контроль.

Но если уж совсем невтерпежь, то вот вам решение. Но оно не панацея, а обманка, которая может сыграть со временем злую шутку!

Максим вам дал ссылку на тему, где обсуждается функция split, она позволяет разбивать строку по какому-то знаку. В самом простом варианте на разбивает по знакам препинания. Попробуйте поиграть именно с ней

Должно быть что-то на подобии:

200 0 MHL,&uf(+7w1#'&uf('+8ex64,split,,v200)),(|T=|g1/)

AVD System, Техническая поддержка, [www.open4u.ru]

Re: Разбить заглавие на несколько маленьких
Пользователь: Gena (IP-адрес скрыт)
Дата: 21, October, 2011 13:04

У вас получилось? Я себе написал свою функцию Сплит для других задач и спокойно разделил строку по определенному символу. Вот работающий пример, реализующий похожую с вашей здачу.

&uf('+7'),

&uf('+7w1#'&uf('+8test_dll,Split_D,<,>'&uf('av1909^h#1'))),

&uf('+7w2#'(if p(g1) then &uf('g0('g1) fi/),)

&unifor('U'(|, |+g2))

У меня была задача убрать в 909 поле данные, введеные в скобках за номерами полученной периодики. Изначально там был текст, похожий на:

1-3,4(15 янв.),5(17 янв),...256(29 дек.)

Как это работает:
1. очищаем все глобальные переменные
2. в глобальную переменную 1 записываем результат расформатирования поля 1909^H функцией Split_D. У нее следующий синтаксис: разделитль передается вместе со строкой, но отделяется от нее знаками <>, за которыми следует сам текст, которыйы надо делить. разделитель может быть как одним символом, так и словом или даже предложением.
3. прохожусь по всем повторениям поля 1, урезаю все начиная со знака ( и записываю в глобальную переменную 2
4. использую &unifor('U' для создания куммулированной строчки.

В итоге я получил строку 1-256, чего и хотел

Вам по идеи надо нечто аналогичное. можете использовать мою длл, можете попробовать с той, что сделал Максим, все вполне решаемо.

AVD System, Техническая поддержка, [www.open4u.ru]



Редактировано 1 раз. Последний раз 21.10.2011 13:06 пользователем Gena.

Вложения: test_dll.dll (540KB)  
Re: Разбить заглавие на несколько маленьких
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 21, October, 2011 23:50

решил так:
200 0 MHL,if p(v200^a) and v200^a:'. ' then 'T=',&uf("G0."v200^a) fi
200 0 MHL,if p(v200^a) and v200^a:'. ' then 'T=',&uf("G2 "d200^a,&uf("G0."d200^a,&uf("G2."v200^a))) fi
200 0 MHL,if p(v200^a) and v200^a:'. ' then 'T=',&uf("G2 "d200^a,&uf("G0."d200^a,&uf("G2."d200^a,&uf("G2."v200^a)))) fi
Интересно было реализовать только средствами ИРБИС, не привлекая сторонние разработки, чтобы показать возможности программы.

Re: Разбить заглавие на несколько маленьких
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 22, October, 2011 00:59

Небольшое отступление от темы: если стандартные средства Ирбис не позволяют решить задачу полноценно, то применение сторонних разработок является наилучшим решением. Причина: не полноценно решенная задача не считается решенной.

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



Редактировано 1 раз. Последний раз 22.10.2011 01:03 пользователем Панев Максим.

Re: Разбить заглавие на несколько маленьких
Пользователь: Lavrinovich (IP-адрес скрыт)
Дата: 22, October, 2011 15:32

Интересная идея - советовать обманку и сразу же в этом сознаваться...

Re: Разбить заглавие на несколько маленьких
Пользователь: Gena (IP-адрес скрыт)
Дата: 23, October, 2011 00:02

Я так подозреваю, что Максим имеет в виду использование глобальных корректировок. Да, в глобальной корректировке есть возможность использовать цикл. Общая идея следующая:
1. в некое поле закидываем заглавие
2. начинаем цикл (repeat)
3. в другое поле копируем часть до точки
4. изменяем значение поля, усекая в нем все до точки
5. проверям циклом что бы текст еще содержал точку (until)
6. когда точек не осталось в то второе поле копируем остаток первого
7. текст из второго поля есть отдельными заглавиями и его можно забросить в словарь заглавий(T=)

AVD System, Техническая поддержка, [www.open4u.ru]

Re: Разбить заглавие на несколько маленьких
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 23, October, 2011 12:03

Я имел ввиду то, что разбить такую строку на части можно и стандартными средствами ЯФ. Только получится неоправданно тяжелый формат.

А в целом: если описание создается не правильно, тогда нужно править описание (с помощью ГК уже видимо, или вручную), а не пытаться эти ошибки замазать изменением алгоритмов.



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