|
Выбрать только буквы и цфры |
☑ |
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(Строка);
КонецЦикла
|
|
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой