Страница 1 из 1
RegExp или как реализовать Алгоритм очистки строки от мусора
Добавлено: 16 окт 2007, 09:35
Александр
не подскажите как в действии реализовать быстрый алгоритм очистки вставленной в строковое поле строки от ненужных символов
например юзер вставил строку
"Производственно-техническая компания *ПТК* <АСПЕКТ>"
нужно по шаблону
'<>()*".,$#@'
очистить строку от этих символов
возможно используя из действия инструменты SQL (применив SQL только как средство вычисления типа Select 1+2) без запроса как такового (к таблицам)
может кто уже реализовал или есть какие соображения?
можно конечно в действии на двух шагах зациклить и сдвигая шаблон вырезать из строки все что надо
но наверняка есть более красивое решение???
Добавлено: 26 окт 2007, 10:58
Юрий
В 4.20 Сборка 071008 появилась замечательная функция f_GlobalReplace(source,old,new,ignorecase)
Добавлено: 26 окт 2007, 12:07
Александр
да появилась, круто , но один символ, а хотелось бы всю мощь регулярных выражений, я уже на sql что-то присмотрел - смысл в вызове RegExp'a VBScript через WHS средствами SQL - конечно выглядит кривовато... но когда еще Лоция прилепит скрипты к действиям,а так уже можно работать
я вообще все больше склоняюсь к тому чтобы все вычисления проводить на стороне самого SQL т.к. представленный Лоцией интерпритатор - во многих элементарных случаях (работа с битами и т.д.) уже не спасает
ну это мое личное мнение

Re: RegExp или как реализовать Алгоритм очистки строки от мусора
Добавлено: 07 апр 2010, 14:55
Александр
вопрос решили шагом типа скрипт
Код: Выделить всё
Sub ClearString
LsVars.SetVarValue "tmp", cStr(RIC_Function.ClearCopyPaste(LsVars.GetVarValue("tmp")))
end sub
который обращается к модулю с нашими функциями где
Код: Выделить всё
...
'-----------------------Очистить строку от всех лишних символов операции Copy/Paste-------------------------
Function ClearCopyPaste(Desc)
Dim RegExp
'тест
'Desc = " " & Chr(34) & "a,.{s. d]f\g'a/ ё-2s" & vbTab & "d(f)7 8a" & vbCr & "sdf" & Chr(34) & "adf "
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.IgnoreCase = True
.Global = True
'убить пробелы >2
.Pattern = "[\s]{2,}"
Desc = .Replace(Trim(Desc), " ")
'убить все лишнее (вначале и в конце удалить ' и " в середине оставить буквы и цифры + одинарный пробел +'+"+(+)+-)
.Pattern = "(^[\x22\x27]{1,})|([^a-zA-Zа-яА-ЯЁё\d\x20\x22\x27()-«»])|([\x22\x27]{1,}$)"
Desc = .Replace(Desc, "")
End With
Set RegExp = Nothing
ClearCopyPaste=Desc
End Function
...
можно и в mssql напрямую... но неохота

и паттерн наверно можно красивей оформить - но не знаю как
