-
Коллеги, приветствую!
В MSSQL (именно с ней работаем) есть оператор like.
Не знаете готовой реализации такого оператора только на delphi?
Например, в MSSQL пишу [Data] like 'wwr%dsfd%sdfs%sdfsf' Хочу иметь в Delphi функцию Like(Data, 'wwr%dsfd%sdfs%sdfsf'), где результат типа boolean.
-
регулярки же
-
Оператор like работает как регулярки? Первый раз слышу.
-
> Оператор like работает как регулярки?
Ему трудно работать иначе
-
> Игорь Шевченко © (19.12.16 14:17) [3] > > Оператор like работает как регулярки? > Ему трудно работать иначе
Я неточно выразился. Сейчас поправлюсь.
Функционал регулярок существенно шире, чем оператора like (как минимум в MSSQL2000). Вот кусок справки из MSSQL2000:
% - Any string of zero or more characters. _ - (underscore) Any single character. [ ] - Any single character within the specified range. [^] - Any single character not within the specified range.
Видно, что возможности like на порядок ниже, чем у регулярок (даже в диалоге Find Text в Delphi возможности поиска по регулярным выражениям существенно шире).
Отсюда очевидный (для меня) вывод, что в MSSQL оператор like реализован не на основе регулярок, а сделан специально под функционал, который и привел выше как выдержку из справки. Почему я так думаю? Потому, что реализовать описанный функционал и только его существенно проще в части производительности алгоритма, чем использовать мощные регулярки (используя из них 10% функционала), а, сам понимаешь, like должен работать быстро (это очень важное требование).
Если я не прав, и для реализации like используется рег. выр., то почему оператор like такой убогий по сравнению с рег. выр.? Может у тебя в Oracle like крут, как регулярки. Но я работаю на MSSQL и его like мне хватает для моих задач. Сейчас же хочу некоторую фильтрацию делать на клиенте (вернее в промежуточном сервисе) на Delphi.
Поэтому мой вопрос был о том, видел ли кто-то уже реализованный на Delphi оператор like без лишних возможностей, которые непосредственно в like не используются.
-
> Поэтому мой вопрос был о том, видел ли кто-то уже реализованный > на Delphi оператор like без лишних возможностей, которые > непосредственно в like не используются.
Добавлю. Написать like я могу. Но не уверен, что сделаю это хорошо - нужна скорость работы. А это можно только на асме сделать хорошо. А асм я не знаю. Есть надежда, что кто-то умный уже написал подобный алгоритм, просто я о нем не знаю.
-
> Функционал регулярок существенно шире, чем оператора like
Скажем так, принцип сопоставления с образцом в регулярных выражениях и в операторе like одинаков. Отсюда следует, что написать регулярное выражение с использованием синтаксиса регулярных выражений, соответствующее поведению оператора like не сложно.
-
-
-
то что для программиста ты слишком увлечен философствованиями. возьми наследуйся от тобджект, инкапсулируй регулярки и вынеси наружу один матч который сделай таким же убогим как лайк.
-
> iop © (19.12.16 15:52) [9] > то что для программиста ты слишком увлечен философствованиями. > возьми наследуйся от тобджект, инкапсулируй регулярки и > вынеси наружу один матч который сделай таким же убогим как > лайк.
Про философствование точно подмечено. Но именно это философствование помогает мне 23 года поддерживать мои проекты (в сумме ляма на 2 строк). Ну это я так, похвалился немного, больше не буду)))
Чес в начале нулевых, когда надо было много писать (не особо философствуя) у меня прошел. Процентов на 50 у меня теперь рефактор идет того, что нефилософствуя наплодил раньше. Теперь имею возможность подумать (пофилософствовать) и сделать сразу хорошо. Разве это плохо?
Мое программистское чутье говорит мне о том, что даже хорошая реализация регулярок будет медленнее работать, чем реализация like, написанная чисто под like.
Можно, конечно, попробовать. Ты вот какими регулярками в дельфи пользуется? У меня в Дельфи2007 штатной регулярки нет. Надо где-то брать.
-
> Мое программистское чутье говорит мне о том, что даже хорошая > реализация регулярок будет медленнее работать, чем реализация > like, написанная чисто под like.
Мое программистское чутье говорит, что скорость очень хорошо определяется тестовыми примерами, а узкие места - профилировщиком.
-
> Мое программистское чутье говорит, что скорость очень хорошо > определяется тестовыми примерами, а узкие места - профилировщиком.
Игорь, и тебя тоже спрошу - ты какой библиотекой регулярных выражений пользуешься? (в моем дельфи 2007 штатной подобной библиотеки нет).
-
в моем дельфи 2007 штатной подобной библиотеки нет
беда беда.....
есть паскалевский модуль регулярок. так же везде есть com VBScript.RegExp
-
> Игорь, и тебя тоже спрошу - ты какой библиотекой регулярных > выражений пользуешься?
Я никакой не пользуюсь - мне не надо
-
Но именно это философствование помогает мне 23 года поддерживать мои проекты (в сумме ляма на 2 строк). Ну это я так, похвалился немного, больше не буду)))
по хорошему тебя надо просто уволить. вместе с твоими лямами. в 23 это еще бывает неочевидно.
нужен аналог лайка в паскале. где его взять - сказали. берем и пользуемся. но нет. надо пофилософствовать что это избыточно, что мне столько не надо, что лайк если он простой то стопроцентно не на двигле регулярных выражений построен.
зачем ты такой нужен?
-
> Игорь Шевченко © (19.12.16 16:52) [14]
Предельно лаконичный ответ, поддерживаю!
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
|