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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.07.2009, 16:34   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
? Транслитерация русских букв в английские
Кто нибудь писал метод транслитерации русских букв и английские?
Какой ГОСТ или стандарт выбрали транслитерации?
Предполагается транслитерировать ФИО сотрудника.

http://www.transliteration.ru/
http://ru.wikipedia.org/wiki/%D0%A2%...86%D0%B8%D1%8F

ПРИКАЗ МВД РФ от 31.12.2003 N 1047
http://mvd.consultant.ru/doc.asp?ID=...=1&PT=3&Page=5

Последний раз редактировалось Poleax; 03.07.2009 в 16:37. Причина: ПРИКАЗ МВД РФ от 31.12.2003 N 1047
Старый 03.07.2009, 17:15   #2  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
получился код
X++:
static void Job110(Args _args)
{
    str rus = 'Василиса Васильев';
    str eng = '';
    str abc,old;
    int i;
    ;

//    if('ВАСЯ'=='вася') info('одинаково');

    for(i=1; i <= strlen(rus); i++)
    {
     //ПРИКАЗ МВД РФ от 31.12.2003 N 1047
     abc = SubStr(rus,i,1);
         switch (abc)
         {
             case 'а' : eng += 'a'; break;
             case 'А' : eng += 'A'; break;
             case 'б' : eng += 'b'; break;
             case 'Б' : eng += 'B'; break;
             case 'в' : eng += 'v'; break;
             case 'В' : eng += 'V'; break;
             case 'г' : eng += 'g'; break;
             case 'Г' : eng += 'G'; break;
             case 'д' : eng += 'd'; break;
             case 'Д' : eng += 'D'; break;
             case 'е' : if(old == 'ь') eng += 'y';
                         eng += 'e'; break;
             case 'Е' : if(old == 'ь') eng += 'Y';
                         eng += 'E'; break;
             case 'ё' : if(old == 'ь') eng += 'y';
                        eng += 'e'; break;
             case 'Ё' : if(old == 'ь') eng += 'Y';
                         eng += 'E'; break;
             case 'ж' : eng += 'zh'; break;
             case 'Ж' : eng += 'ZH'; break;
             case 'з' : eng += 'z'; break;
             case 'З' : eng += 'Z'; break;
             case 'и' : eng += 'i'; break;
             case 'И' : eng += 'I'; break;
             case 'й' : eng += 'y'; break;
             case 'Й' : eng += 'Y'; break;
             case 'к' : eng += 'k'; break;
             case 'К' : eng += 'K'; break;
             case 'л' : eng += 'l'; break;
             case 'Л' : eng += 'L'; break;
             case 'м' : eng += 'm'; break;
             case 'М' : eng += 'M'; break;
             case 'н' : eng += 'n'; break;
             case 'Н' : eng += 'N'; break;
             case 'о' : eng += 'o'; break;
             case 'О' : eng += 'O'; break;
             case 'п' : eng += 'p'; break;
             case 'П' : eng += 'P'; break;
             case 'р' : eng += 'r'; break;
             case 'Р' : eng += 'R'; break;
             case 'с' : eng += 's'; break;
             case 'С' : eng += 'S'; break;
             case 'т' : eng += 't'; break;
             case 'Т' : eng += 'T'; break;
             case 'у' : eng += 'u'; break;
             case 'У' : eng += 'U'; break;
             case 'ф' : eng += 'f'; break;
             case 'Ф' : eng += 'F'; break;
             case 'х' : eng += 'rh'; break;
             case 'Х' : eng += 'RH'; break;
             case 'ц' : eng += 'ts'; break;
             case 'Ц' : eng += 'TS'; break;
             case 'ч' : eng += 'ch'; break;
             case 'Ч' : eng += 'CH'; break;
             case 'ш' : eng += 'sh'; break;
             case 'Ш' : eng += 'SH'; break;
             case 'щ' : eng += 'shch'; break;
             case 'Щ' : eng += 'SHCH'; break;
             case 'ы' : eng += 'y'; break;
             case 'Ы' : eng += 'Y'; break;
             case 'э' : eng += 'e'; break;
             case 'Э' : eng += 'E'; break;
             case 'ю' : eng += 'yu'; break;
             case 'Ю' : eng += 'YU'; break;
             case 'я' : eng += 'ya'; break;
             case 'Я' : eng += 'YA'; break;
         }
        old = StrLWr(SubStr(rus,i,1));
    }

    info(rus + '  ' + eng);
}
Как заставить при сравнении различать регистр букв? Может какой флаг включить?

Последний раз редактировалось Poleax; 03.07.2009 в 17:23.
Старый 03.07.2009, 17:59   #3  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
char2num()
Цитата:
Сообщение от Poleax Посмотреть сообщение
...
Как заставить при сравнении различать регистр букв? Может какой флаг включить?
Через коды символов - char2num() :
X++:
static void jbCheckUppercase(Args _args)
{
    str strTest = 'ёЁItisВасилийBasil' ;
    int idxChar ;
    
    boolean isUpperCase( str 1 _char )
    {
        int charIdx = char2num( _char, 1  ) ;
        ;
        
        //  english
        if( charIdx >= char2num( 'A', 1  ) &&
            charIdx <= char2num( 'Z', 1  ) )
            return true ;
            
        //  russian
        if( charIdx == char2num( 'Ё', 1  ) ||
            (   charIdx >= char2num( 'А', 1  ) &&
                charIdx <= char2num( 'Я', 1  ) ) )
            return true ;
            
        return false ;
    }

    boolean isLowerCase( str 1 _char )
    {
        int charIdx = char2num( _char, 1  ) ;
        ;
        
        //  english
        if( charIdx >= char2num( 'a', 1  ) &&
            charIdx <= char2num( 'z', 1  ) )
            return true ;
            
        //  russian
        if( charIdx == char2num( 'ё', 1  ) ||
            (   charIdx >= char2num( 'а', 1  ) &&
                charIdx <= char2num( 'я', 1  ) ) )
            return true ;
            
        return false ;
    }
    ;
    
    for( idxChar=1; idxChar <= strlen( strTest ); idxChar++ )
        info( strfmt( "%1 - %2", substr( strTest, idxChar, 1 ), isUpperCase( substr( strTest, idxChar, 1 ) ) ) ) ;
}
P.S. strCmp - сравнивает с учетом регистра символов: strcmp( 'Ё', 'ё' ) = -1 ( !=0)
__________________
Dynamics AX 4.0 SP2

Последний раз редактировалось in.dc; 03.07.2009 в 18:05.
За это сообщение автора поблагодарили: Poleax (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Копирование "русских" данных из ORACLE в SQL. Результат кракозябры. Anton Sk. DAX: Программирование 3 25.03.2008 10:32
Почему Аксапта может зависать при использовании русских букв в штрихкоде? Logger DAX: Программирование 4 24.01.2008 10:12
Тормоза SQL при наличии в InventDimId русских букв. polygris DAX: Программирование 9 28.08.2007 13:48
В NT 4 ПРИ ПЕЧАТИ ДОКУМЕНТОВ крякозябы вместо русских букв?! Mironov DAX: Администрирование 6 11.11.2003 16:59
Вместо русских букв - знаки вопроса Adson DAX: Функционал 6 12.09.2003 16:54

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

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

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