Имя: Пароль:
1C
1С v8
Упрощение циклов
0 orensymrak
 
05.07.12
10:56
Процедура КнопкаВыполнитьНажатие(Кнопка)
ЭлементыФормы.Надпись1.Значение = "";
строка1 = "УКЕНХВАРООСМТYKEHXBAPOOCMT00"; // строка букв
строка2 = "YKEHXBAPO0CMTУКЕНХВАРО0СМТОO"; // строка соответствия с строкой1
Символы_ = Новый Массив(4);
ВременМассив = Новый Массив(4);
результат = Новый массив(1);

Для НомерСимвола = 0 по 3 Цикл
ВременМассив[НомерСимвола] = Новый Массив(1);
Символы_[НомерСимвола] = Сред(ЭлементыФормы.ПолеВвода1.Значение, НомерСимвола+1,1); // Разделяем введеный текст посимвольно

Для Ф =1 По СтрДлина(строка1) Цикл // Проверяем на наличие в строка1
Символ_ = Сред(строка1,Ф,1);
Если Символы_[НомерСимвола] = Символ_ Тогда
ВременМассив[НомерСимвола][0]=Символы_[НомерСимвола]; //Если имеется соотвт. вносим в массив значение [0,0] -> Н
ВременМассив[НомерСимвола].Добавить(сред(строка2,Ф,1)); // [0,1] -> Н*
Иначе
ВременМассив[НомерСимвола][0]= символы_[НомерСимвола];
КонецЕсли;
КонецЦикла;
КонецЦикла;

Для Первый = 0 По ВременМассив[0].ВГраница() Цикл // Н ->
Для Второй =0 По ВременМассив[1].ВГраница() Цикл // Н ->
Для Третий=0 По ВременМассив[2].ВГраница() Цикл // О -> О* -> 0
Для Четвертый=0 По ВременМассив[3].ВГраница() Цикл
ЭлементыФормы.Надпись1.Значение = ЭлементыФормы.Надпись1.Значение + ВременМассив[0][Первый] + ВременМассив[1][Второй] +
ВременМассив[2][Третий] + ВременМассив[3][Четвертый]+символы.Таб;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;    
КонецПроцедуры

Проблема состоит в том чтобы упростить последние 4 цикла в 2.
Вообще задача такая что вводим от 2 до 4х символов и выводился результат перебора соответствия например вводим ННО(рус буквы все). быувы соответствия для введеных
Н -> H*,
О -> O* -> 0
и выводится результат:
ННО
Н*НО
НН*О
ННО*
Н*Н*О
Н*НО*
Н*Н*О*
НН0
Н*Н0
НН*0
Н*Н*0
1 Mort
 
05.07.12
11:07
Есть подозрение, задача распознания похожих символов решается через заднее место.
2 Один С
 
05.07.12
11:08
все не читал. А так нельзя разве?
СтрЗаменить("Н", "Н*");
СтрЗаменить("О", "0");
3 kosts
 
05.07.12
11:14
а звездочка зачем?
4 orensymrak
 
05.07.12
15:29
Звездочка для примера что это англ буква
5 Ненавижу 1С
 
гуру
05.07.12
15:34
рекурсией сделай
6 Лефмихалыч
 
05.07.12
15:39
regular expressions!
7 Лефмихалыч
 
05.07.12
15:42
(0) задача не понятна. Ты сам-то понимаешь, что в результате получить надо?
8 orensymrak
 
05.07.12
15:47
Задачу я выше описал, и вполне понятна, она вообще типа теста, вводим любые символы и алгоритм должен вывести все варианты перебора с рус и англ символами как показано выше на примере с ННО
9 palpetrovich
 
05.07.12
15:55
(8) нифига не понятно ... результат перебора чего?  перебирать можно законченный массив букв, почему * может размножаться?
10 orensymrak
 
05.07.12
17:51
* тут чисто для пояснения что это англ буква, перебор соответствий для У -> Y и т.д. если уже и ввели УУ то результат должен получиться
УУ

УY
YY
и уже если не понятно то по коду проверить это можно и все понятно было бы
11 asady
 
05.07.12
18:43
(0) ВЫБРАТЬ
Т1.Знач КАК Т1,
Т2.Знач КАК Т2
ИЗ Т1 КАК Т1
ПОЛНОЕ СОЕДИНЕНИЕ Т1 КАК Т2
По ИСТИНА

как-то так для двух
12 Один С
 
05.07.12
20:49
Символы_
Символ_
НомерСимвола
От этих символов в глазах рябит. Нихрена не понятно чо автор хочет. Толи я тупой, толи одно из двух.
Если нужно строку перевести в другую раскладку согласно двум строкам соответствия, то почему бы просто не найти положение символа в строке1 и считать символ который в том же положении в строке2? К чему эти переборы по 18 раз?
Ошибка? Это не ошибка, это системная функция.