Транслит

  • Автор темы Hryv
  • Дата начала
Статус
Закрыто для дальнейших ответов.
H

Hryv

#1
У меня есть строка содержащая 2 прописные буквы, которые одинаково выглядят в кирилице и латинице.
И справочник с таким же реквизитом
По этой строке надо найти элемент
Получается, в общем случае, надо сделать 4 поиска: Для "ЛЛ", "ЛК", "КЛ" и "КК".
Проблема в том, что исходная строка сама может быть в каждом из этих 4 вариантов и как-то не хочется писать "в лоб" алгоритм перевода ее в 3 других варианта.

Короче говоря, хотелось бы иметь примерно такую функцию
Транслит(Буква, КЛ) // КЛ = 1, вернет в кирилице, КЛ = 2, вернет в латинице

Если есть у кого, поделитесь, плиз
 
P
#2
самое простое и надежное тупой перевод посимвольно в один формат (стандарт).
 

puh14

Well-known member
11.07.2008
1 412
0
#3
КодСимв() / симв() ? Только от перебора строчки посимвольно опять-же не обойтись.

Хочешь извращенческий вариант? - по сути у тебя код символа - это цифра. Перебираешь строку по которой ищешь (просто быстрее чем всё в справочниках перебирать) и если суммы кодов двух стоящих рядом букв (кодСимв()) попадают в 16 вариантов меняешь эти символы (Симв()) на нужные тебе.
 
H

Hryv

#4
а почему 16 вариантов
я насчитал 11 букв у которых начертания совпадают
получается надо делать примерно так
для буквы 'А'
Код:
Код = КодСимв(Буква);
Если (Код = 65) или (Код = 192) Тогда
Возврат ?(КЛ=1, Симв(192), Симв(65));
КонецЕсли;
Впринципе для 11 букв не проблема так написать и будет у меня нужная функция

А перебирать строку мне не надо, реквизит состоит только из 2 букв и его просто надо сравнить с 4 вариантами

Добавлено:
самое простое и надежное тупой перевод посимвольно в один формат (стандарт).
Можно и так
образец и реквизит привести, например, к латинице, а потом сравнить
так даже явно лучше, чем 4 раза сравнивать
 

puh14

Well-known member
11.07.2008
1 412
0
#5
16 - это для двухбуквенных строчек во всех вариантах. Я то думал что тебе надо именно двухбуквенные варианты "переводить".
 
H

Hryv

#6
мне и надо двухбуквенные, но почему 16 вариантов я не догоняю
если подходить с этой стороны, то как минимум 484 варианта существует
но сумма кодов не будет уникальной
например, AM (65+77) = CK (67+75)
 
Статус
Закрыто для дальнейших ответов.