1С 8.3 Преобразование Кириллицы в Латиницу (и обратно) - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Преобразование Кириллицы в Латиницу (и обратно)

Данные > Примеры кода 1С > 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_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);
      КонецЕсли;

      ВыходСтрока = ВыходСтрока + СимволВСтроку;
  КонецЦикла;

  Возврат ВыходСтрока;

КонецФункции
1
комментарий
Сергей
28 мар 2022
Спасибо, всё работает! Только единственное, что нужно добавить, это вот эту строчку:

AZ_2.Вставить(?(Реверс=Ложь,"х","kh"),?(Реверс=Истина,"х","kh"));
____________________
Copyright©, «Программист 1С в г.Минске», 26.05.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому