AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.07.2012, 14:57   #1  
egater is offline
egater
Участник
Аватар для egater
 
19 / 10 (1) +
Регистрация: 06.10.2011
Конвертация текста из кириллицы в латинский алфавит
Здравствуйте.
При генерации бар кодов, столкнулся с проблемой невозможности работы с кириллицей.
Есть ли какой нибудь алгоритм, превращающий текст на кириллице в транс лит.
Старый 27.07.2012, 14:59   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Ищите здесь на форуме, было.
Старый 27.07.2012, 15:31   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от egater Посмотреть сообщение
Здравствуйте.
При генерации бар кодов, столкнулся с проблемой невозможности работы с кириллицей.
Есть ли какой нибудь алгоритм, превращающий текст на кириллице в транс лит.
вот например была тема
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.07.2012, 12:08   #4  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от lev Посмотреть сообщение
В данном варианте транслита будут проблемы с обратной конвертацией в кириллицу. Тоже сталкивался с данной проблемой при работе с баркодами. Использовал вариант с 2я латинскими буквами на 1e кириллическую (р = rr, о = oo, ш = sh и т.д.). Сам алгоритм такой же, как в ссылке.
Старый 30.07.2012, 12:22   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Dark Light Посмотреть сообщение
В данном варианте транслита будут проблемы с обратной конвертацией в кириллицу. Тоже сталкивался с данной проблемой при работе с баркодами. Использовал вариант с 2я латинскими буквами на 1e кириллическую (р = rr, о = oo, ш = sh и т.д.). Сам алгоритм такой же, как в ссылке.
и как Щ переводили?
__________________
Zhirenkov Vitaly
Старый 30.07.2012, 12:43   #6  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
А почему просто не взять гост ?
http://transliteration.ru/gost
Старый 30.07.2012, 12:44   #7  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от ZVV Посмотреть сообщение
и как Щ переводили?
Не помню. Я и мягкий знак как-то переводил. Можно взять любые 2 латинские буквы: главное, чтобы их комбинация была уникальной.

Тут ведь задача какая:
Шаг 1. Переводим кириллицу в латиницу.
Шаг 2. Переводим латиницу в бар-код.
Шаг 3. Переводим бар-код в латиницу (считываем бар-код).
Шаг 4. Переводим латиницу в кириллицу.
Шаг 5. Profit.

И важна в первую очередь однозначность. Читаемость латиницы можно рассматривать как необязательный дополнительный бонус.
Старый 30.07.2012, 12:51   #8  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от GBH Посмотреть сообщение
А почему просто не взять гост ?
http://transliteration.ru/gost
Да, думаю можно использовать его: вроде всё однозначно. Если конечно исходный текст заведомо не содержит " и '.

Просто в данном примере
Цитата:
Сообщение от lev Посмотреть сообщение
было например непонятно, если написано "ja", то это "я" или "йа", если написано "sch", то это "щ" или "сцх".

Кстати, если исходный текст может содержать как кириллицу, так и латиницу, то тут понадобится ещё и спецсимвол.

Последний раз редактировалось Dark Light; 30.07.2012 в 12:53.
Старый 30.07.2012, 13:29   #9  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А, простите, в чем сакральный смысл переводить латиницу в бар-код? баркод для того и предназначен, что представляет из себя закодированный идентификатор. Который можно потом по базе найти и расшифровать. Если необходимо с помощью баркода переносить какую - либо информацию, то смотрите в сторону 2х мерных кодов.

С Уважением,
Георгий
Старый 30.07.2012, 13:49   #10  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от George Nordic Посмотреть сообщение
А, простите, в чем сакральный смысл переводить латиницу в бар-код? баркод для того и предназначен, что представляет из себя закодированный идентификатор. Который можно потом по базе найти и расшифровать. Если необходимо с помощью баркода переносить какую - либо информацию, то смотрите в сторону 2х мерных кодов.

С Уважением,
Георгий
Стандартные отчеты в AX вплоть до 2009 не поддерживают двумерных бар-кодов (насчет 2012 не знаю). И вообще любых, способных кодировать кириллицу. Поддерживаемые форматы можно увидеть в Barcode-классах.

Если есть необходимость, например, в накладной бар-кодом выводить её номер, и при этом маска номера содержит кириллицу (например, Нклд--00001), то особого выбора нет.
Старый 30.07.2012, 16:08   #11  
virhundo is offline
virhundo
Участник
 
33 / 16 (1) ++
Регистрация: 29.03.2007
ещё вариант:
я делал такой "финт ушами" для BC 128 в 3.0, едиственный минус - растет длина штрихкода :

X++:
static str IsolateSymbols(str _inputStr)
{
    str       Code128SymbCard ="_!#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz[\]^`{|}~\"\'";
    str       charBC, charBC_prev, charBC_next;
    int       len, i;
    str       encodedStr;
    ;
       //Формирование строки штрихкода
            len = strlen(_inputStr);
            for(i=1; i<=len;i++)
            {
               charBC_prev  = i==1 ? "" : substr(_inputStr,i-1,1);
               charBC       = substr(_inputStr,i,1);
               charBC_next  = substr(_inputStr,i+1,1);
                 //изоляция  руских букв, пробелов, etc
                 if(strfind(charBC,Code128SymbCard,1,1)<=0) // не нашли символ в таблице символов CODE128
                 {
                     charBC  =  int2str(char2num(charBC,1));
                     if(strlen(charBC)<3)
                          charBC = "0"+ charBC; //ascii для пробела, etc
                     //проверка пред. и след. символа
                     //есть некорректный пред. символ
                     if(charBC_prev!="" && strfind(charBC_prev,Code128SymbCard,1,1)<=0)
                         encodedStr      += charBC;
                     else encodedStr     += "{"+ charBC;
                     //есть некорректный след. символ
                     if(charBC_next!="" && strfind(charBC_next,Code128SymbCard,1,1)<=0)
                          encodedStr      += "";
                     else encodedStr     += "}";
                 }
                 else
                 encodedStr += charBC;
              }
   return  encodedStr;
}
Старый 30.07.2012, 16:27   #12  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
2 virhundo
Не совсем понятно, если честно.
Проверки на регистр нет, но контейнер включает буквы с разными регистрами. strfind тоже всё равно до регистра. В итоге я получу, наверно, не то, что хочу. Всё таки коды "А" и "а", разные.
Хотя, для текущей задачи может этого и не надо.

UPD. По ходу напутал что-то я со strfind.

Последний раз редактировалось GBH; 30.07.2012 в 16:33.
Старый 30.07.2012, 16:37   #13  
virhundo is offline
virhundo
Участник
 
33 / 16 (1) ++
Регистрация: 29.03.2007
сорри,
разве char2num("а",1) и char2num("А",1) - одно и тоже?
Старый 30.07.2012, 16:39   #14  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Цитата:
Сообщение от virhundo Посмотреть сообщение
сорри,
разве char2num("а",1) и char2num("А",1) - одно и тоже?
Да я же сказал, что ступил чего-то
Старый 30.07.2012, 16:45   #15  
virhundo is offline
virhundo
Участник
 
33 / 16 (1) ++
Регистрация: 29.03.2007
Хотя по сейчас я склоняюсь к промежуточной таблице кодирования штрихкода номерной серией, допустим при печати штрихкода функция типа findOrCreate() cопоставляет "Накл --001" c цифровым 12345 и кодирует в баркод уже 12345. При чтении - наоборот по промежуточному коду получаем значение "Накл --001" . Тогда получается самый компактный и читаемый штрихкод.
Старый 01.08.2012, 14:11   #16  
Antonuch is offline
Antonuch
Участник
 
41 / 15 (1) ++
Регистрация: 21.06.2007
X++:
static str translit(str value, boolean letteronly = false)
{
    container rus = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'];
    container lat = ['a','b','v','g','d','e','jo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','','y','','e','ju','ja'];
    int i, n;
    str letter;
    str ret;
    ;
    for (i = 1;i<=strlen(value);i++)
    {
        letter = strlwr(substr(value,i,1));
        n =  confind(rus,letter);
        ret += n>0 ? conpeek(lat,n) : letter;
    }

    return letteronly ? strkeep(ret,'abcdefghijklmnopqrstuvwxyz0123456789') : ret;
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Падает клиент Аксапты, при вставке текста из буфера обмена vc DAX: Администрирование 11 04.09.2009 11:46
направление текста в лэйбле колонки репорта DAX DAX: Программирование 3 28.01.2009 16:48
Форматирование текста if_maks DAX: Программирование 64 20.11.2006 13:12
Подскажите,как узнать высоту текста? yooshi DAX: Программирование 1 06.10.2005 10:29
Автозавершение текста slava DAX: Функционал 4 30.12.2001 00:29

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:20.