28.05.2008, 11:01 | #1 |
Участник
|
Транслит
Доброго всем времени суток, Уважаемые знатоки, не подскажете, есть ли в аксапте класс, переводящий русские символы в английские?
|
|
28.05.2008, 11:14 | #2 |
Программатор
|
Думаю что нет Но написать самому такой класс плевое дело...
|
|
28.05.2008, 11:16 | #3 |
Участник
|
|
|
28.05.2008, 11:19 | #4 |
Участник
|
писать действительно 10 минут от силы...
|
|
28.05.2008, 11:22 | #5 |
MCTS
|
ГОСТ-у 7.79-2000 и switch case вам в помощь
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
28.05.2008, 11:23 | #6 |
Программатор
|
|
|
28.05.2008, 11:24 | #7 |
Сенбернар
|
Погорячился, IMHO. Это с какой же скоростью по клаве щелкать надо?
__________________
Best Regards, Roman |
|
28.05.2008, 11:28 | #8 |
Программатор
|
23 секунды на копи паста аглицких букав, + 9 минут 37 секунд на оформление и подстановку правильных руских букв .
|
|
28.05.2008, 11:28 | #9 |
Участник
|
Цитата:
Сообщение от Russland
ГОСТ-у 7.79-2000 и switch case вам в помощь
|
|
28.05.2008, 11:28 | #10 |
Участник
|
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 |
Программатор
|
ВООО
|
|
28.05.2008, 11:38 | #12 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
А как с регистром же быть? Регистр то не ловится чето совсем?
|
|
11.04.2016, 19:18 | #14 |
Участник
|
Так как все сравнения по умолчанию регистронезависимые можно не делать 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 |
Участник
|
Если в замене больше одного символа, то к верхнему регистру наверное нужно приводить только первый символ а не все.
|
|
|
За это сообщение автора поблагодарили: belugin (3). |
11.04.2016, 20:42 | #16 |
Участник
|
Fixed
|
|
21.04.2016, 15:15 | #17 |
Участник
|
Транслит с учетом регистра
Добрый день.
Немного доработал метод, который преобразует строку в транслит с учетом регистра. Может кому-нибудь пригодится. 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). |