Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3

Реализация оператора like в Delphi


Тимохов Дима ©   (18.12.16 23:08

Коллеги, приветствую!

В 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]

Удалено модератором


Страницы: 1 2 3 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо