Имя: Пароль:
1C
 
Перебор букв и цифр
0 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
насчет похожестей наврал
3 Margo95
 
09.01.21
07:40
(1) если меняю "ЛеваяЧастьСлова+Сред(СтрокаПохожести,НомерВСтрокеПохожести,1)+ПраваяЧастьСлова,НомерСимвола-1" на вашу часть кода, то при нажатии на кнопку, просто закрывается предприятие и нужно перезапускать полностью 1с
4 acht
 
09.01.21
11:26
"Нашли задачу на просторах интернета", точно-точно

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

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