Страница 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 - конечно выглядит кривовато... но когда еще Лоция прилепит скрипты к действиям,а так уже можно работать :wink:
я вообще все больше склоняюсь к тому чтобы все вычисления проводить на стороне самого SQL т.к. представленный Лоцией интерпритатор - во многих элементарных случаях (работа с битами и т.д.) уже не спасает :wink:
ну это мое личное мнение :wink: :wink:

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 напрямую... но неохота :wink:
и паттерн наверно можно красивей оформить - но не знаю как :wink: