Имя: Пароль:
1C
 
Перевод символов с кириллицы на латиницу
0 чувак
 
24.09.08
09:35
Вообщем средствами встроенного языка нужна такая функция.
Например, "Ровшанов Джамшут Абдуллаевич" надо переводить на "Rovshanov Dzhamshut Abdullaevich"
Я написал функцию, но думаю она кривая :))
У кого есть мысли получше ?

Функция Перевод()
   Кириллица = "А*Б*В*Г*Д*Е*Ж*З*И*К*Л*М*Н*О*П*Р*С*Т*У*Ф*Х*Ц*Ч*Ш*Щ*Э*Ю*Я*ЬЪ";
   Латин      = "A B V G D E ZHZ I K L M N O P R S T U F X TSCHSHSHE YUYA  ";
   БукваЛатин = "";
   Для А = 1 По СтрДлина(СокрЛП(АА)) Цикл
       БукваКирилл = Сред(АА,А,1);                                      
       ПозицияБуквы = Найти(Кириллица,Врег(БукваКирилл));
       БукваЛатин2   = СокрЛП(Сред(Латин,ПозицияБуквы,2));
       Если БукваКирилл = Нрег(БукваКирилл)Тогда
           БукваЛатин2 = Нрег(БукваЛатин2);
       КонецЕсли;
       БукваЛатин  = БукваЛатин + ?(БукваКирилл = " "," ",БукваЛатин2);
   КонецЦикла;            
   Возврат БукваЛатин;
КонецФункции
1 butterbean
 
24.09.08
09:39
(0) ИМХО проще так:
СтрЗаменить(Стр,"Д","D");
СтрЗаменить(Стр,"Я","YA");
И так далее...
2 у лю 427
 
24.09.08
09:40
дятлы...
за использование функций ЕСЛИ и СтрЗаменить в преобразовании принято бить морду идиотам...
3 чувак
 
24.09.08
09:41
(1) Слишком много букоф будет
4 чувак
 
24.09.08
09:42
(2) Когда нить тебя найду и застрелю :)
5 VasilyKushnir
 
24.09.08
09:49
(2) Можешь предложить нечто более изящное? (Абсолютно без подвоха спрашиваю). У меня навскидку идея с двумя списками значений (это чтобы для двухнаправленой замены) - по номеру позиции из одного сз подставляет из такой же позиции из другого сз. А то действительно (4) может застрелить... (:-)
6 у лю 427
 
24.09.08
10:15
(4) для тебя приготовил ответную пулю из гавна...


(5) вся идея сто лет в обед как реализована

Задача - перекодирование текста.

Условия - каждый символ исходного текста д.б. заменен на 1 или несколько!!! символов выходного текста

Реализация
Шевелим мосхом, какой еще остался и вспоминаем, что в 1С есть массивы

Создаем массив строк - как константу
Массив [код исходного символа 0] = "Что выводить вместо исх символа с кодом 0"
Массив [код исходного символа 1] = "Что выводить вместо исх символа с кодом 1"
Массив [код исходного символа 2] = "Что выводить вместо исх символа с кодом 2"
Массив [код исходного символа 3] = "Что выводить вместо исх символа с кодом 3"
Массив [код исходного символа 4] = "Что выводить вместо исх символа с кодом 4"
Массив [код исходного символа 5] = "Что выводить вместо исх символа с кодом 5"
............
и так далее до 255 символа


перевод считанной строки
специально расписываю разными операторами - чтобы было понятней




ВыходнаяСтрока = "";

для Индекс = 1 по СтрДлина(ИсходнаяСТрока) цикл
    Код = кодСимвола( Сред (ИсходнаяСтрока,Индекс,1);
    ВыходнаяСтрока = ВыходнаяСТрока + Массив [КодСимвола]
писец Мотоциклу


в общем - примерно как в (5) - но сделано на массиве, ибо работа с массивом очень быстрая в отличие от списков. Длина массива заранее известна...
7 dk
 
24.09.08
10:19
Задачка старая и решалась на форуме не один раз, называется транслитерация
ЗЫ правда поиск не нашел нифига :(
8 чувак
 
24.09.08
10:20
(6) Вот где гавнометы водятся, я думал они с планеты Жупитер
9 у лю 427
 
24.09.08
10:21
примерно этот алгоритм реализован в любой ОС в таблицах перекодировки....


двунаправленная замена не всегда возможна... кстати....
10 у лю 427
 
24.09.08
10:22
(7) это не только транслитерация ....
11 чувак
 
24.09.08
10:22
(7) Я тоже не мог найти, поэтому обратился. А тут обрушились дятлофобы :)
12 VasilyKushnir
 
24.09.08
10:24
(6) Согласен - с массивами пошустрее будет, чем с СЗ.