Имя: Пароль:
1C
1С v8
Выбрать только буквы и цфры
,
0 Zixxx
 
12.04.12
07:12
Как менее затратно по производительности преобразовать строку с различным набором символов в строку содержащей только Русски, Английские буквы и цифры. Например строку: Б*Я)D-Z/0+9 преобразовываем в БЯDZ09
Если делать тупо перебором с контролем кода символа то это очень долго, нужно вариант значительно быстрее.
1 Wobland
 
12.04.12
07:13
СтрЗаменить(стр, "(", "");
...
2 Molinor
 
12.04.12
07:14
Регулярным выражением, думаю, что получится. Только я их составлять не умею.
3 Cube
 
12.04.12
07:15
(1) +1
4 Рэйв
 
12.04.12
07:18
Стр="";
Для н=1 по СтрДлина(Слово) цикл
  Сим=Сред(Слово,1,н);
  Если Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",Врег(Сим))>0  Тогда
     Стр=Стр+Сим;
КонецЦикла;
Сообщить(Стр);
5 Рэйв
 
12.04.12
07:19
+..КонецЕсли забыл:-)
6 Zixxx
 
12.04.12
07:34
(4) Перебор по символьно, найти тоже не фонтан...
7 Рэйв
 
12.04.12
07:35
(6)Более оптимально не придумаешь. все равно перебирать придется.
8 Рэйв
 
12.04.12
07:35
не одно так другое.
9 DimVad
 
12.04.12
07:46
(7) Перебор по символьно в таких языках, как 1С действительно не самое быстрое решение. Мне кажется, самое оптимальное - регулярные выражения (будут вызываться функции, написанные на С). Есть еще вариант - довольно извращенческий - написать свою функцию на С#, например. Чем плохо:
1. Надо будет таскать с собой лишнюю библиотеку.
2. Надо будет писать функцию для одной разовой задачки.

Вывод : если уважаемый ТС решит эту задачу через регулярные выражения - хорошо будет. А если еще и напишет свое решение здесь - хорошо будет и нам...
10 DimVad
 
12.04.12
07:48
Ну смотрите, я открыл в и-нете описание шаблонов по рег. выр. - "\d    Соответствует цифре. То же, что и [0-9]". "[a-z]    Диапазон символов. Соответствует любому символу в указанном диапазоне. Например, "[1-5]" соответствует числам от 1 до 5". Осталось понять, как это запустить в 1С.
11 КМ155
 
12.04.12
08:03
(10) это редкостное шаманство:
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "(\{\w\})";
Результат = RegExp.Exec(Строка);
Пока НЕ Результат = Неопределено Цикл
Сообщить(Результат[1])
Результат = RegExp.Exec(Строка);
КонецЦикла