Вход | Регистрация
 

Перебор букв и цифр

Перебор букв и цифр
Я
   Margo95
 
09.01.21 - 06:04
Добрый день, есть код, который должен перебирать символы, есть различное оформление, а - русская буква, А - английская буква, так же учитывается , что 0 похож на русскую и английскую букву О, результат обработки должен быть такой

APO
APo
AP0
ApO
Apo
Ap0
aPO
aPo
aP0
apO
apo
ap0

но он выводит намного больше "результатов", подскажите в чем проблема, пожалуйста, код ниже

&НаКлиенте
Процедура Команда1(Команда)
    СписокПохожестей = Новый Массив;
    СписокПохожестей.Добавить("АаAa");
    СписокПохожестей.Добавить("РрPp");
    СписокПохожестей.Добавить("ОоOo0");
    
    ВходноеСлово = "АРО";
    
    ПеребратьСимволВСлове(СписокПохожестей,ВходноеСлово,СтрДлина(ВходноеСлово));
КонецПроцедуры

Процедура ПеребратьСимволВСлове(СписокПохожестей, Знач ВходноеСлово, Знач НомерСимвола)
    Если НомерСимвола<1 Тогда
        Сообщить(ВходноеСлово);
        Возврат;
    КонецЕсли;
    
    ПроверяемыйСимвол = Сред(ВходноеСлово,НомерСимвола,1);
    Для Каждого СтрокаПохожести из СписокПохожестей Цикл
        Если СтрНайти(СтрокаПохожести,ПроверяемыйСимвол)>0 Тогда
            ЛеваяЧастьСлова  = Лев (ВходноеСлово,НомерСимвола-1);
            ПраваяЧастьСлова = Сред(ВходноеСлово,НомерСимвола+1);
            Для НомерВСтрокеПохожести = 1 по СтрДлина(СтрокаПохожести) Цикл
                ПеребратьСимволВСлове(СписокПохожестей,ЛеваяЧастьСлова+Сред(СтрокаПохожести,НомерВСтрокеПохожести,1)+ПраваяЧастьСлова,НомерСимвола-1);
            КонецЦикла;
            Прервать;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
   Йохохо
 
1 - 09.01.21 - 07:03
СтрНайти вообще не согласна с такими "похожестями"
а так
"ЛеваяЧастьСлова+Сред(СтрокаПохожести,НомерВСтрокеПохожести,1)+ПраваяЧастьСлова,НомерСимвола-1" -> "Сред(СтрокаПохожести, 2),1)"
всё переписать
   Йохохо
 
2 - 09.01.21 - 07:07
насчет похожестей наврал
   Margo95
 
3 - 09.01.21 - 07:40
(1) если меняю "ЛеваяЧастьСлова+Сред(СтрокаПохожести,НомерВСтрокеПохожести,1)+ПраваяЧастьСлова,НомерСимвола-1" на вашу часть кода, то при нажатии на кнопку, просто закрывается предприятие и нужно перезапускать полностью 1с
   acht
 
4 - 09.01.21 - 11:26
"Нашли задачу на просторах интернета", точно-точно

https://forum.infostart.ru/forum9/topic254123/
   asady
 
5 - 09.01.21 - 11:36
Что-то похожее есть - допили под себя
Функция ЗаменитьЛатыньНаКирилицу(ТекстоваяСтрока)
    Лат = "AaBCcEeHKkMmnOoPpTuXxy";
    Рус = "АаВСсЕеНКкМтпОоРрТиХху";
    Результат = ТекстоваяСтрока;
    Для сч =1 по СтрДлина(Результат) Цикл
        тПоз = Найти(Лат,Сред(Результат,сч,1));
        Если тПоз>0 Тогда
            Результат = СтрЗаменить(Результат,Сред(Лат,тПоз,1),Сред(Рус,тПоз,1));
        конецЕсли;    
    КонецЦикла;    
    Возврат Результат;
КонецФункции

Функция ЗаменитьКирилицуНаЛатынь(ТекстоваяСтрока)
    Лат = "AaBCcEeHKkMmnOoPpTuXxy";
    Рус = "АаВСсЕеНКкМтпОоРрТиХху";
    Результат = ТекстоваяСтрока;
    Для сч =1 по СтрДлина(Результат) Цикл
        тПоз = Найти(Рус,Сред(Результат,сч,1));
        Если тПоз>0 Тогда
            Результат = СтрЗаменить(Результат,Сред(Рус,тПоз,1),Сред(Лат,тПоз,1));
        конецЕсли;    
    КонецЦикла;    
    Возврат Результат;
КонецФункции
   Margo95
 
6 - 09.01.21 - 11:52
(4) немного не поняла, что сделала не так
(5) Видела данный вариант, но все равно спасибо) нашла ошибку, по какой причине не правильно отрабатывал код, дальше пытаюсь доработать)
   Йохохо
 
7 - 09.01.21 - 11:58
пакетным запросом вообще изи, оп чик декартово .. профит)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.