Замена русских букв латинскими аналогами

1. farkhod 14 23.08.12 18:08 Сейчас в теме
У кого какие идеи по данному поводу. В интернете нарыл только два предложения:
1. Воспользоваться встроенной функцией СтрЗаменить
Переменная1=StrReplace(Переменная1, "а","a");
Переменная1=StrReplace(Переменная1, "б","b");
Переменная1=StrReplace(Переменная1, "в","v");
Переменная1=StrReplace(Переменная1, "г","g");
Переменная1=StrReplace(Переменная1, "д","d");
Переменная1=StrReplace(Переменная1, "е","e");
Переменная1=StrReplace(Переменная1, "ё","ye");
Переменная1=StrReplace(Переменная1, "ж","zh");

2. Второе, создать регистр сведений и забить туда эти соответствия. При поиске преобразовать согласно соответствию в этом справочнике
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. demarine 23.08.12 18:27 Сейчас в теме
мне больше нравиться через
Текст = СтрЗаменить(Текст, "ж","zh");
Так что я за первый вариант.
+
3. mihan 117 23.08.12 18:47 Сейчас в теме
вот здесь таблица транслитерации по ГОСТ
http://transliteration.ru/gost/
регистр сведений создавать из-за такой ерунды не стоит по-моему
Lena272; dour-dead; +2
6. andrewks 1370 23.08.12 23:46 Сейчас в теме
(3) а вот ФМС уже кодирует по другим правилам. например, ю - iu, я - ia
+
4. dshel 23.08.12 18:53 Сейчас в теме
Можно создать макет и там соответствия прописать, хотя проще наверное все через СтрЗаменить
+
5. Spektr 1000 23.08.12 21:58 Сейчас в теме
Встречал такой код по преобразованию строки с русского на латиницу:
Процедура КнопкаВыполнитьНажатие(Кнопка)
СтрокаВыход = Транслит(СтрокаВход);	
КонецПроцедуры

Функция Транслит(Вход) 
	
	Русский = "абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШ­ЩЬЫЪЭЮЯ";
	Англ	= "a;b;v;g;d;e;yo;zh;z;i;y;k;l;m;n;o;p;r;s;t;u;f;kh;ts;ch;sh;shch;;y;;e;yu;ya;A;B;V;G;D;E;Yo;Zh;Z;I;Y;K;L;M;N;O;P;R;S;T;U;F;Kh;Ts;Ch;Sh;Shch;;Y;;E;Yu;Ya";
	МассивАнгл = _РазложитьСтрокуВМассивПодстрок(Англ,";");
	ДлиннаВход = СтрДлина(Вход);
	Выход = "";
	Для а=1 По ДлиннаВход Цикл 
		ТекущийСимвол = Сред(Вход,а,1);	
		Позиция = Найти(Русский,ТекущийСимвол);
		Если Позиция > 0 Тогда 
			Выход = Выход + МассивАнгл[Позиция-1];
		Иначе 
			Выход = Выход + ТекущийСимвол;
		КонецЕсли;
	КонецЦикла;
	Возврат Выход;
	
КонецФункции

Функция _РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
   
КонецФункции
Показать
user1835472; +1
7. andrewks 1370 23.08.12 23:47 Сейчас в теме
через СтрЗаменить будет самое быстрое
RakovskiyK; zoytsa; +2
8. vkozak 24.08.12 10:27 Сейчас в теме
Решал похожую задачу, остановился на СтрЗаменить().
Всех бед не решает, сам по себе английский язык сложен нет однозначных соответствий да и кроме английского есть и другие языки с латиницей. В моем случае были названия на английском и испанском языках, в половине случаев пришлось руками перевод доводить.
Вот текст
Функция Руссифицировать(КЗамене)
	КЗамене=СтрЗаменить(КЗамене,"Sh","Ш");
	КЗамене=СтрЗаменить(КЗамене,"sh","ш");
	КЗамене=СтрЗаменить(КЗамене,"Cp","Ч");
	КЗамене=СтрЗаменить(КЗамене,"cp","ч");
	КЗамене=СтрЗаменить(КЗамене,"Sp","Ф");
	КЗамене=СтрЗаменить(КЗамене,"sp","ф");
	//КЗамене=СтрЗаменить(КЗамене,"Er","Ё");
	//КЗамене=СтрЗаменить(КЗамене,"er","ё");
	КЗамене=СтрЗаменить(КЗамене,"Ee","И");
	КЗамене=СтрЗаменить(КЗамене,"ee","и");
	КЗамене=СтрЗаменить(КЗамене,"Oo","У");
	КЗамене=СтрЗаменить(КЗамене,"oo","у");
	КЗамене=СтрЗаменить(КЗамене,"A","А");
	КЗамене=СтрЗаменить(КЗамене,"a","а");
	КЗамене=СтрЗаменить(КЗамене,"B","Б");
	КЗамене=СтрЗаменить(КЗамене,"b","б");
	КЗамене=СтрЗаменить(КЗамене,"Q","К");
	КЗамене=СтрЗаменить(КЗамене,"q","к");
	КЗамене=СтрЗаменить(КЗамене,"W","В");
	КЗамене=СтрЗаменить(КЗамене,"w","в");
	КЗамене=СтрЗаменить(КЗамене,"E","Э");
	КЗамене=СтрЗаменить(КЗамене,"e","э");
	КЗамене=СтрЗаменить(КЗамене,"R","Р");
	КЗамене=СтрЗаменить(КЗамене,"r","р");
	КЗамене=СтрЗаменить(КЗамене,"T","Т");
	КЗамене=СтрЗаменить(КЗамене,"t","т");
	КЗамене=СтрЗаменить(КЗамене,"Y","И");
	КЗамене=СтрЗаменить(КЗамене,"y","и");
	КЗамене=СтрЗаменить(КЗамене,"U","У");
	КЗамене=СтрЗаменить(КЗамене,"u","у");
	КЗамене=СтрЗаменить(КЗамене,"I","И");
	КЗамене=СтрЗаменить(КЗамене,"i","и");
	КЗамене=СтрЗаменить(КЗамене,"O","О");
	КЗамене=СтрЗаменить(КЗамене,"o","о");
	КЗамене=СтрЗаменить(КЗамене,"P","П");
	КЗамене=СтрЗаменить(КЗамене,"p","п");
	КЗамене=СтрЗаменить(КЗамене,"S","С");
	КЗамене=СтрЗаменить(КЗамене,"s","с");
	КЗамене=СтрЗаменить(КЗамене,"D","Д");
	КЗамене=СтрЗаменить(КЗамене,"d","д");
	КЗамене=СтрЗаменить(КЗамене,"F","Ф");
	КЗамене=СтрЗаменить(КЗамене,"f","ф");
	КЗамене=СтрЗаменить(КЗамене,"G","Г");
	КЗамене=СтрЗаменить(КЗамене,"g","г");
	КЗамене=СтрЗаменить(КЗамене,"H","Х");
	КЗамене=СтрЗаменить(КЗамене,"h","х");
	КЗамене=СтрЗаменить(КЗамене,"J","Дж");
	КЗамене=СтрЗаменить(КЗамене,"j","дж");
	КЗамене=СтрЗаменить(КЗамене,"K","К");
	КЗамене=СтрЗаменить(КЗамене,"k","к");
	КЗамене=СтрЗаменить(КЗамене,"L","Л");
	КЗамене=СтрЗаменить(КЗамене,"l","л");
	КЗамене=СтрЗаменить(КЗамене,"Z","З");
	КЗамене=СтрЗаменить(КЗамене,"z","з");
	КЗамене=СтрЗаменить(КЗамене,"X","Кс");
	КЗамене=СтрЗаменить(КЗамене,"x","кс");
	КЗамене=СтрЗаменить(КЗамене,"C","К");
	КЗамене=СтрЗаменить(КЗамене,"c","к");
	КЗамене=СтрЗаменить(КЗамене,"V","В");
	КЗамене=СтрЗаменить(КЗамене,"v","в");
	КЗамене=СтрЗаменить(КЗамене,"N","Н");
	КЗамене=СтрЗаменить(КЗамене,"n","н");
	КЗамене=СтрЗаменить(КЗамене,"M","М");
	КЗамене=СтрЗаменить(КЗамене,"m","м");

	Возврат КЗамене;

КонецФункции
Показать
+
9. farkhod 14 26.08.12 21:35 Сейчас в теме
Как полученные результаты на русском и на английском одновременно задать в значение отбора в форме выбора справочника?
Спр.Отбор.ВидСравнения = ВидСравнения.Содержит;
Спр.Отбор.Значение = ???
+
10. Spektr 1000 27.08.12 13:18 Сейчас в теме
Простая функцию транслитерации:

Функция ЗаменитьОдниСимволыДругими(Что,Где,НаЧто) Экспорт
    Рез = Где;
    Для Сч = 1 По СтрДлина(Что) Цикл
        Рез = СтрЗаменить(Рез,Сред(Что,Сч,1),Сред(НаЧто,Сч,1));
    КонецЦикла;
    Возврат Рез;
КонецФункции //ЗаменитьОдниСимволыДругими

Функция ТрЛит(Знач Слово) 
    Слово = ВРег(Слово);
    Слово = ?(Лев(Слово,1) = "Е","YE"+Сред(Слово,2),Слово);
    Слово=СтрЗаменить(Слово,"АЕ","AYE");
    Слово=СтрЗаменить(Слово,"ЕЕ","EYE");
    Пока Найти(Слово,"EЕ") > 0 Цикл
        Слово = СтрЗаменить(Слово,"EЕ","EYE");
    КонецЦикла;
    Слово=СтрЗаменить(Слово,"ЕЁ","YEYO");
    Слово=СтрЗаменить(Слово,"ЁЕ","YOYE");
    Слово=СтрЗаменить(Слово,"ИЕ","IYE");
    Слово=СтрЗаменить(Слово,"ОЕ","OYE");
    Слово=СтрЗаменить(Слово,"УЕ","UYE");
    Слово=СтрЗаменить(Слово,"ЫЕ","YYE");
    Слово=СтрЗаменить(Слово,"ЭЕ","EYE");
    Слово=СтрЗаменить(Слово,"ЮЕ","YUYE");
    Слово=СтрЗаменить(Слово,"ЯЕ","YAYE");
    Слово=СтрЗаменить(Слово,"ЬЕ","YE");
    Слово=СтрЗаменить(Слово,"ЪЕ","YE");
    Слово=СтрЗаменить(Слово,"Ё","YO");
    Слово=СтрЗаменить(Слово,"Ж","ZH");    
    Слово=СтрЗаменить(Слово,"Х","KH");
    Слово=СтрЗаменить(Слово,"Ц","TS");
    Слово=СтрЗаменить(Слово,"Ч","CH");
    Слово=СтрЗаменить(Слово,"Ш","SH");
    Слово=СтрЗаменить(Слово,"Щ","CHSH");
    Слово=СтрЗаменить(Слово,"Ъ","");
    Слово=СтрЗаменить(Слово,"Ь","");
    Слово=СтрЗаменить(Слово,"Ю","YU");
    Слово=СтрЗаменить(Слово,"Я","YA");
    Слово=ЗаменитьОдниСимволыДругими("АБВГДЕЗИЙКЛМНОПРСТУФЫЭ",Слово,"ABVGDEZIJKLMNOPRSTUFYE");
    Возврат Слово;
КонецФункции
Показать
FilatovRA; bxz; +2
11. coder108 27.08.12 15:29 Сейчас в теме
Может быть в общем модуле описать соответствие типа

ств[а] = "a";
...
ств[я] = "ya";


ну а потом парсить строку и заменять "я" на стр[я] итд посимвольно

найн?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот