1С 8.3 Преобразование Кириллицы в Латиницу (и обратно)
Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Перейти в раздел примеры кода 1С 8.3:
Функция преобразует в 1С 8.3 строку из кириллицы в латиницу и наоборот, из латиницы в кириллицу с помощью параметра реверс.
Преобразование Кириллицы в Латиницу (и обратно) в 1С 8.3:
Функция Транслит(СтрокаВход, Реверс) Экспорт
// Параметры:
// СтрокаВход - строка на Кириллице или Латинице
// Реверс - Булево, если Истина, то строка на Латинице. Преобразуем Латиницу в Кириллицу
// если Ложь, то строка на Кириллице. Преобразуем Кириллицу в Латиницу
ВыходСтрока= "";
AZ_3 = Новый Соответствие; // три символа (сочетание)
AZ_2 = Новый Соответствие; // два символа (сочетание)
AZ_1 = Новый Соответствие; // один символ
// Соответствие символов
// кириллицы и латиницы
AZ_3.Вставить(?(Реверс=Ложь,"щ","sch"),?(Реверс=Истина,"щ","sch"));
AZ_2.Вставить(?(Реверс=Ложь,"э","je"),?(Реверс=Истина,"э","je"));
AZ_2.Вставить(?(Реверс=Ложь,"ю","ju"),?(Реверс=Истина,"ю","ju"));
AZ_2.Вставить(?(Реверс=Ложь,"я","ya"),?(Реверс=Истина,"я","ya"));
AZ_2.Вставить(?(Реверс=Ложь,"ё","jo"),?(Реверс=Истина,"ё","jo"));
AZ_2.Вставить(?(Реверс=Ложь,"ж","zh"),?(Реверс=Истина,"ж","zh"));
AZ_2.Вставить(?(Реверс=Ложь,"ч","ch"),?(Реверс=Истина,"ч","ch"));
AZ_2.Вставить(?(Реверс=Ложь,"ш","sh"),?(Реверс=Истина,"ш","sh"));
AZ_1.Вставить(?(Реверс=Ложь,"а","a"),?(Реверс=Истина,"а","a"));
AZ_1.Вставить(?(Реверс=Ложь,"б","b"),?(Реверс=Истина,"б","b"));
AZ_1.Вставить(?(Реверс=Ложь,"в","v"),?(Реверс=Истина,"в","v"));
AZ_1.Вставить(?(Реверс=Ложь,"г","g"),?(Реверс=Истина,"г","g"));
AZ_1.Вставить(?(Реверс=Ложь,"д","d"),?(Реверс=Истина,"д","d"));
AZ_1.Вставить(?(Реверс=Ложь,"е","e"),?(Реверс=Истина,"е","e"));
AZ_1.Вставить(?(Реверс=Ложь,"з","z"),?(Реверс=Истина,"з","z"));
AZ_1.Вставить(?(Реверс=Ложь,"и","i"),?(Реверс=Истина,"и","i"));
AZ_1.Вставить(?(Реверс=Ложь,"й","j"),?(Реверс=Истина,"й","j"));
AZ_1.Вставить(?(Реверс=Ложь,"к","k"),?(Реверс=Истина,"к","k"));
AZ_1.Вставить(?(Реверс=Ложь,"л","l"),?(Реверс=Истина,"л","l"));
// Параметры:
// СтрокаВход - строка на Кириллице или Латинице
// Реверс - Булево, если Истина, то строка на Латинице. Преобразуем Латиницу в Кириллицу
// если Ложь, то строка на Кириллице. Преобразуем Кириллицу в Латиницу
ВыходСтрока= "";
AZ_3 = Новый Соответствие; // три символа (сочетание)
AZ_2 = Новый Соответствие; // два символа (сочетание)
AZ_1 = Новый Соответствие; // один символ
// Соответствие символов
// кириллицы и латиницы
AZ_3.Вставить(?(Реверс=Ложь,"щ","sch"),?(Реверс=Истина,"щ","sch"));
AZ_2.Вставить(?(Реверс=Ложь,"э","je"),?(Реверс=Истина,"э","je"));
AZ_2.Вставить(?(Реверс=Ложь,"ю","ju"),?(Реверс=Истина,"ю","ju"));
AZ_2.Вставить(?(Реверс=Ложь,"я","ya"),?(Реверс=Истина,"я","ya"));
AZ_2.Вставить(?(Реверс=Ложь,"ё","jo"),?(Реверс=Истина,"ё","jo"));
AZ_2.Вставить(?(Реверс=Ложь,"ж","zh"),?(Реверс=Истина,"ж","zh"));
AZ_2.Вставить(?(Реверс=Ложь,"ч","ch"),?(Реверс=Истина,"ч","ch"));
AZ_2.Вставить(?(Реверс=Ложь,"ш","sh"),?(Реверс=Истина,"ш","sh"));
AZ_1.Вставить(?(Реверс=Ложь,"а","a"),?(Реверс=Истина,"а","a"));
AZ_1.Вставить(?(Реверс=Ложь,"б","b"),?(Реверс=Истина,"б","b"));
AZ_1.Вставить(?(Реверс=Ложь,"в","v"),?(Реверс=Истина,"в","v"));
AZ_1.Вставить(?(Реверс=Ложь,"г","g"),?(Реверс=Истина,"г","g"));
AZ_1.Вставить(?(Реверс=Ложь,"д","d"),?(Реверс=Истина,"д","d"));
AZ_1.Вставить(?(Реверс=Ложь,"е","e"),?(Реверс=Истина,"е","e"));
AZ_1.Вставить(?(Реверс=Ложь,"з","z"),?(Реверс=Истина,"з","z"));
AZ_1.Вставить(?(Реверс=Ложь,"и","i"),?(Реверс=Истина,"и","i"));
AZ_1.Вставить(?(Реверс=Ложь,"й","j"),?(Реверс=Истина,"й","j"));
AZ_1.Вставить(?(Реверс=Ложь,"к","k"),?(Реверс=Истина,"к","k"));
AZ_1.Вставить(?(Реверс=Ложь,"л","l"),?(Реверс=Истина,"л","l"));
AZ_1.Вставить(?(Реверс=Ложь,"м","m"),?(Реверс=Истина,"м","m"));
AZ_1.Вставить(?(Реверс=Ложь,"н","n"),?(Реверс=Истина,"н","n"));
AZ_1.Вставить(?(Реверс=Ложь,"о","o"),?(Реверс=Истина,"о","o"));
AZ_1.Вставить(?(Реверс=Ложь,"п","p"),?(Реверс=Истина,"п","p"));
AZ_1.Вставить(?(Реверс=Ложь,"р","r"),?(Реверс=Истина,"р","r"));
AZ_1.Вставить(?(Реверс=Ложь,"с","s"),?(Реверс=Истина,"с","s"));
AZ_1.Вставить(?(Реверс=Ложь,"т","t"),?(Реверс=Истина,"т","t"));
AZ_1.Вставить(?(Реверс=Ложь,"у","u"),?(Реверс=Истина,"у","u"));
AZ_1.Вставить(?(Реверс=Ложь,"ф","f"),?(Реверс=Истина,"ф","f"));
AZ_1.Вставить(?(Реверс=Ложь,"х","h"),?(Реверс=Истина,"х","h"));
//AZ_2.Вставить(?(Реверс=Ложь,"х","kh"),?(Реверс=Истина,"х","kh")); или так
AZ_1.Вставить(?(Реверс=Ложь,"ц","c"),?(Реверс=Истина,"ц","c"));
AZ_1.Вставить(?(Реверс=Ложь,"ы","y"),?(Реверс=Истина,"ы","y"));
AZ_1.Вставить(?(Реверс=Ложь,"ъ",""),?(Реверс=Истина,"ъ",""));//#
AZ_1.Вставить(?(Реверс=Ложь,"ь",""),?(Реверс=Истина,"ь",""));//'
//AZ_1.Вставить(?(Реверс=Ложь," ","_"),?(Реверс=Истина," ","_"));// пробел
Для Сч=1 По СтрДлина(СтрокаВход) Цикл
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,3));
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,2));
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_1.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
КонецЕсли;
КонецЕсли;
Иначе
Сч=Сч+1
КонецЕсли;
Иначе
Сч=Сч+2
КонецЕсли;
Если НайденныйСимвол <> Неопределено Тогда
СимволВСтроку = НайденныйСимвол;
Иначе // Если не нашли соответствие, то оставляем символ как есть
СимволВСтроку = Сред(СтрокаВход,Сч,1);
КонецЕсли;
ВыходСтрока = ВыходСтрока + СимволВСтроку;
КонецЦикла;
Возврат ВыходСтрока;
КонецФункции
AZ_1.Вставить(?(Реверс=Ложь,"н","n"),?(Реверс=Истина,"н","n"));
AZ_1.Вставить(?(Реверс=Ложь,"о","o"),?(Реверс=Истина,"о","o"));
AZ_1.Вставить(?(Реверс=Ложь,"п","p"),?(Реверс=Истина,"п","p"));
AZ_1.Вставить(?(Реверс=Ложь,"р","r"),?(Реверс=Истина,"р","r"));
AZ_1.Вставить(?(Реверс=Ложь,"с","s"),?(Реверс=Истина,"с","s"));
AZ_1.Вставить(?(Реверс=Ложь,"т","t"),?(Реверс=Истина,"т","t"));
AZ_1.Вставить(?(Реверс=Ложь,"у","u"),?(Реверс=Истина,"у","u"));
AZ_1.Вставить(?(Реверс=Ложь,"ф","f"),?(Реверс=Истина,"ф","f"));
AZ_1.Вставить(?(Реверс=Ложь,"х","h"),?(Реверс=Истина,"х","h"));
//AZ_2.Вставить(?(Реверс=Ложь,"х","kh"),?(Реверс=Истина,"х","kh")); или так
AZ_1.Вставить(?(Реверс=Ложь,"ц","c"),?(Реверс=Истина,"ц","c"));
AZ_1.Вставить(?(Реверс=Ложь,"ы","y"),?(Реверс=Истина,"ы","y"));
AZ_1.Вставить(?(Реверс=Ложь,"ъ",""),?(Реверс=Истина,"ъ",""));//#
AZ_1.Вставить(?(Реверс=Ложь,"ь",""),?(Реверс=Истина,"ь",""));//'
//AZ_1.Вставить(?(Реверс=Ложь," ","_"),?(Реверс=Истина," ","_"));// пробел
Для Сч=1 По СтрДлина(СтрокаВход) Цикл
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,3));
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,2));
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_1.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
Если НайденныйСимвол = Неопределено Тогда
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
КонецЕсли;
КонецЕсли;
Иначе
Сч=Сч+1
КонецЕсли;
Иначе
Сч=Сч+2
КонецЕсли;
Если НайденныйСимвол <> Неопределено Тогда
СимволВСтроку = НайденныйСимвол;
Иначе // Если не нашли соответствие, то оставляем символ как есть
СимволВСтроку = Сред(СтрокаВход,Сч,1);
КонецЕсли;
ВыходСтрока = ВыходСтрока + СимволВСтроку;
КонецЦикла;
Возврат ВыходСтрока;
КонецФункции
1
комментарий
Сергей
28 мар 2022
Спасибо, всё работает! Только единственное, что нужно добавить, это вот эту строчку:
AZ_2.Вставить(?(Реверс=Ложь,"х","kh"),?(Реверс=Истина,"х","kh"));
AZ_2.Вставить(?(Реверс=Ложь,"х","kh"),?(Реверс=Истина,"х","kh"));
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник