Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
Сортировка БО с национальными знаками в выходных формах
Пользователь: Gena (IP-адрес скрыт)
Дата: 12, May, 2010 17:30

Проблема сортировки библиографических описаний с национальными знаками(в моем случае это БО, составленные на украинском языке) уже ни раз озвучивалась на форуме. Суть ее в том, что сортировка производится по ASCII-коду символа, а в этих кодах многие национальные знаки выносятся в своей нумерации в разные непоследовательные области. Вот и получается, что украинские буквы І і Ї ї Є є улетают в английский текст. Получается путаница. Во многих выходных формах эта проблема могла быть проигнорирована. Но вот сотрудники попытались вывести Систематический указатель по персоналиям и там сразу же всплыла эта проблема. Так как русские и украинские БО, которые выводятся на печать приблизительно составляли 50/50, пришлось искать пути решения проблемы.
Так как ирбис использует для сортировки коды, которые не подходят в нашем случае, то надо эти коды как-то подменить. И тогда появилась идея перехватить текст, который отправляется на сортировку и заменить его уже заранее подготовленными кодами в цифровом эквиваленте. Для решения этой задачи был создан справочник такого вида

A
001
a
002
B
003
b
004
C
005
c
006
...

А
051
а
052
Б
053
б
054
В
055
в
056
...
1
121
2
122
3
123

В этом справочнике перечисленны все значащие символы и присвоены им коды, которые будут определять порядок сортировки - чем меньше код, тем ближе к началу сортированного списка будет находится текст.
А в Систематическом указателе блок, который выводит текст с ФИО автора и название документа взял взял в &unifor('+7W1#' Таким образом в переменной g1 оказался интересующий меня текст. Далее повторяем несколько разблок &uf('kalf_cod.mnu\'&uf('ag1*1.1#1')) постоянно смещая на 1 буквы в тексте. Я ввел этот блок для первых 16 символов текста сортировки, оказалось более чем достаточно. В итоге - сортировка не по ASCII-кодам, а по кодам, которые мы сами присвоили символам.

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



Редактировано 1 раз. Последний раз 12.05.2010 17:31 пользователем Gena.

Вложения: ALF_COD.mnu (1.1KB)   SuorP.srw (14.5KB)  
Re: Сортировка БО с национальными знаками в выходных формах
Пользователь: Alio (IP-адрес скрыт)
Дата: 12, May, 2010 18:13

Безусловно оригинально - если исходить из НЕВОЗМОЖНОСТИ написания собственного форматного выхода.
Но радикальное решение - это конечно использовать
&uf('+8<имя_DLL>,<имя_функции>,<передаваемые_данные>')

Re: Сортировка БО с национальными знаками в выходных формах
Пользователь: Gena (IP-адрес скрыт)
Дата: 13, May, 2010 00:19

Александр Иосифович, над этим сейчас работаю :)

Re: Сортировка БО с национальными знаками в выходных формах
Пользователь: Милана А. (IP-адрес скрыт)
Дата: 22, June, 2010 09:15

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

Re: Сортировка БО с национальными знаками в выходных формах
Пользователь: Gena (IP-адрес скрыт)
Дата: 22, June, 2010 13:37

Сейчас активно читаю учебник по Delphi, надеюсь что получиться реализовать тоже самое но в виде ДЛЛ

Re: Сортировка БО с национальными знаками в выходных формах
Пользователь: Милана А. (IP-адрес скрыт)
Дата: 25, June, 2010 09:30

У меня была идея включить в такой справочник не все буквы и цифры, а только национальные, примерно такого вида:
&#259;
аяя
&#277;
еяя

а замену производить следующим образом: если буква национальная, замена из справочника, если не национальная, то три раза сам символ:
а
ааа
б
ббб.

Может быть, это рациональнее. Если подумать, то наверное здесь и в справочнике и двух букв достаточно...



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