Конференция "Базы" » Реализация оператора like в Delphi
 
  • Тимохов Дима © (18.12.16 23:08) [0]
    Коллеги, приветствую!

    В MSSQL (именно с ней работаем) есть оператор like.

    Не знаете готовой реализации такого оператора только на delphi?

    Например, в MSSQL пишу
      [Data] like 'wwr%dsfd%sdfs%sdfsf'
    Хочу иметь в Delphi функцию
      Like(Data, 'wwr%dsfd%sdfs%sdfsf'), где результат типа boolean.
  • наберут по объявлению (18.12.16 23:46) [1]
    регулярки же
  • Тимохов Дима © (19.12.16 13:24) [2]
    Оператор like работает как регулярки? Первый раз слышу.
  • Игорь Шевченко © (19.12.16 14:17) [3]

    > Оператор like работает как регулярки?


    Ему трудно работать иначе
  • Тимохов Дима © (19.12.16 14:48) [4]

    > Игорь Шевченко ©   (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 не используются.
  • Тимохов Дима © (19.12.16 14:51) [5]

    > Поэтому мой вопрос был о том, видел ли кто-то уже реализованный
    > на Delphi оператор like без лишних возможностей, которые
    > непосредственно в like не используются.


    Добавлю.
    Написать like я могу. Но не уверен, что сделаю это хорошо - нужна скорость работы. А это можно только на асме сделать хорошо. А асм я не знаю.
    Есть надежда, что кто-то умный уже написал подобный алгоритм, просто я о нем не знаю.
  • Игорь Шевченко © (19.12.16 14:58) [6]

    > Функционал регулярок существенно шире, чем оператора like


    Скажем так, принцип сопоставления с образцом в регулярных выражениях и в операторе like одинаков. Отсюда следует, что написать регулярное выражение с использованием синтаксиса регулярных выражений, соответствующее поведению оператора like не сложно.
  • iop © (19.12.16 15:12) [7]
    то почему оператор like такой убогий по сравнению с рег. выр.?

    https://cdn.meme.am/cache/instances/folder559/500x/74067559.jpg
  • Тимохов Дима © (19.12.16 15:26) [8]

    > iop ©   (19.12.16 15:12) [7]
    > то почему оператор like такой убогий по сравнению с рег.
    >  выр.?
    > https://cdn.meme.am/cache/instances/folder559/500x/74067559.
    > jpg


    Ну и что это значит?
  • iop © (19.12.16 15:52) [9]
    то что для программиста ты слишком увлечен философствованиями. возьми наследуйся от тобджект, инкапсулируй регулярки и вынеси наружу один матч который сделай таким же убогим как лайк.
  • Тимохов Дима © (19.12.16 16:00) [10]

    > iop ©   (19.12.16 15:52) [9]
    > то что для программиста ты слишком увлечен философствованиями.
    >  возьми наследуйся от тобджект, инкапсулируй регулярки и
    > вынеси наружу один матч который сделай таким же убогим как
    > лайк.

    Про философствование точно подмечено.
    Но именно это философствование помогает мне 23 года поддерживать мои проекты (в сумме ляма на 2 строк). Ну это я так, похвалился немного, больше не буду)))

    Чес в начале нулевых, когда надо было много писать (не особо философствуя) у меня прошел. Процентов на 50 у меня теперь рефактор идет того, что нефилософствуя наплодил раньше. Теперь имею возможность подумать (пофилософствовать) и сделать сразу хорошо. Разве это плохо?

    Мое программистское чутье говорит мне о том, что даже хорошая реализация регулярок будет медленнее работать, чем реализация like, написанная чисто под like.

    Можно, конечно, попробовать. Ты вот какими регулярками в дельфи пользуется? У меня в Дельфи2007 штатной регулярки нет. Надо где-то брать.
  • Игорь Шевченко © (19.12.16 16:03) [11]

    > Мое программистское чутье говорит мне о том, что даже хорошая
    > реализация регулярок будет медленнее работать, чем реализация
    > like, написанная чисто под like.


    Мое программистское чутье говорит, что скорость очень хорошо определяется тестовыми примерами, а узкие места - профилировщиком.
  • Тимохов Дима © (19.12.16 16:05) [12]

    > Мое программистское чутье говорит, что скорость очень хорошо
    > определяется тестовыми примерами, а узкие места - профилировщиком.


    Игорь, и тебя тоже спрошу - ты какой библиотекой регулярных выражений пользуешься? (в моем дельфи 2007 штатной подобной библиотеки нет).
  • iop © (19.12.16 16:47) [13]
    в моем дельфи 2007 штатной подобной библиотеки нет

    беда беда.....

    есть паскалевский модуль регулярок.
    так же везде есть com VBScript.RegExp
  • Игорь Шевченко © (19.12.16 16:52) [14]

    > Игорь, и тебя тоже спрошу - ты какой библиотекой регулярных
    > выражений пользуешься?


    Я никакой не пользуюсь - мне не надо
  • iop © (19.12.16 16:53) [15]
    Но именно это философствование помогает мне 23 года поддерживать мои проекты (в сумме ляма на 2 строк). Ну это я так, похвалился немного, больше не буду)))


    по хорошему тебя надо просто уволить. вместе с твоими лямами.
    в 23 это еще бывает неочевидно.

    нужен аналог лайка в паскале.
    где его взять - сказали.
    берем и пользуемся.
    но нет.
    надо пофилософствовать что это избыточно, что мне столько не надо, что лайк если он простой то стопроцентно не на двигле регулярных выражений построен.

    зачем ты такой нужен?
  • Smile © (19.12.16 17:07) [16]
    > Игорь Шевченко ©   (19.12.16 16:52) [14]

    Предельно лаконичный ответ, поддерживаю!
  • Тимохов Дима © (19.12.16 17:22) [17]
    Удалено модератором
  • Тимохов Дима © (19.12.16 17:23) [18]
    Удалено модератором
  • iop © (19.12.16 17:29) [19]
    Удалено модератором
 
Конференция "Базы" » Реализация оператора like в Delphi
Есть новые Нет новых   [118640   +43][b:0][p:0.001]