Тема: Транслит
Показать сообщение отдельно
Старый 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).