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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.05.2008, 11:01   #1  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
! Транслит
Доброго всем времени суток, Уважаемые знатоки, не подскажете, есть ли в аксапте класс, переводящий русские символы в английские?
Старый 28.05.2008, 11:14   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Думаю что нет Но написать самому такой класс плевое дело...
Старый 28.05.2008, 11:16   #3  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
Думаю что нет Но написать самому такой класс плевое дело...
для новичка особенно)))
Старый 28.05.2008, 11:19   #4  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
писать действительно 10 минут от силы...
Старый 28.05.2008, 11:22   #5  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
ГОСТ-у 7.79-2000 и switch case вам в помощь
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 28.05.2008, 11:23   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от Antoncheg Посмотреть сообщение
для новичка особенно)))
Особенно такие задания полезны для новичка
Старый 28.05.2008, 11:24   #7  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от sparur Посмотреть сообщение
писать действительно 10 минут от силы...
Погорячился, IMHO. Это с какой же скоростью по клаве щелкать надо?
__________________
Best Regards,
Roman
Старый 28.05.2008, 11:28   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
23 секунды на копи паста аглицких букав, + 9 минут 37 секунд на оформление и подстановку правильных руских букв .
Старый 28.05.2008, 11:28   #9  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
Цитата:
Сообщение от Russland Посмотреть сообщение
ГОСТ-у 7.79-2000 и switch case вам в помощь
благодарю, про этот ГОСТ не знал
Старый 28.05.2008, 11:28   #10  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
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;
}
За это сообщение автора поблагодарили: EVGL (3), DreamCreator (3), G.Menshikh (1), Antoncheg (1).
Старый 28.05.2008, 11:29   #11  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
ВООО
Старый 28.05.2008, 11:38   #12  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
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;
}
Огромное спасибо! Тема закрыта
Старый 11.04.2016, 16:40   #13  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
А как с регистром же быть? Регистр то не ловится чето совсем?
Старый 11.04.2016, 19:18   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Так как все сравнения по умолчанию регистронезависимые можно не делать strLwr:

X++:
letter = strlwr(substr(value,i,1));
Чтобы сделать регистр, как мне кажется, достаточно добавить в конец что-то типа

X++:
str makeTheSameCase(str _letterToCompare, str _letterToConvert)
{
    return (strCmp(_letterToCompare, strUpr(_letterToCompare))==0)
       ? str2Capital( letterToConvert) : letterToConvert
}
...
ret += n>0 ? makeTheSameCase(letter, conpeek(lat,n)) : letter;

Последний раз редактировалось belugin; 11.04.2016 в 20:42. Причина: str2capital
За это сообщение автора поблагодарили: Владимир Максимов (2), S.Kuskov (2).
Старый 11.04.2016, 20:29   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Если в замене больше одного символа, то к верхнему регистру наверное нужно приводить только первый символ а не все.
За это сообщение автора поблагодарили: belugin (3).
Старый 11.04.2016, 20:42   #16  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Fixed
Старый 21.04.2016, 15:15   #17  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Транслит с учетом регистра
Добрый день.

Немного доработал метод, который преобразует строку в транслит с учетом регистра. Может кому-нибудь пригодится.

X++:
public static str translit(
    str     _value,
    boolean _letteronly = false)
{
    container       rus, lat,
                    rusLower = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'],
                    latLower = ['a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','ts','ch','sh','shch','','y','','e','yu','ya'],
                    rusUpper = ['А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'],
                    latUpper = ['A','B','V','G','D','E','YO','ZH','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','TS','CH','SH','SHCH','','Y','','E','YU','YA'];

    int             i, n;
    str             letter, ret;
    boolean         isLower;
    System.Boolean  isLowerNet;
    System.String   letterNet;
    System.Char     charNet;
    ;

    for (i=1; i<=strlen(_value); i++)
    {
        letter     = substr(_value, i, 1);
        letterNet  = letter;
        charNet    = letterNet.get_Chars(0);
        isLowerNet = System.Char::IsLower(charNet);
        isLower    = isLowerNet;

        if (isLower)
        {
            rus = rusLower;
            lat = latLower;
        }
        else
        {
            rus = rusUpper;
            lat = latUpper;
        }

        n = confind(rus, letter);
        ret += n > 0 ? conpeek(lat, n) : letter;
    }

    return _letteronly ? strkeep(ret,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') : ret;
}
__________________
С уважением, Александр.
За это сообщение автора поблагодарили: Logger (5), Weez (1).
Теги
translit, законченный пример, полезное, транслит

 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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