Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск в предложении по комбинации букв


V l a d i m i r ©   (2004-08-03 14:31:00) 

День добрый! У меня вот такой вопрос: необходимо предусмотреть возможность поиска предложения по комбинации букв (например, найти "вкусное яблоко", а в форме поиска задать только "око"). Каким образом можно перебрать буквы предложения и сопоставить их с ключом поиска?


TUser   (2004-08-04 06:38:00) [1]

Pos, а если по-умному - см. на алголисте алгоритм Кнута-Мориса-Пратта.


KADAN   (2004-08-03 23:03:00) [2]

DBGrid1.DataSource.DataSet.Locate('Fruit','око',[loPartialKey, loCaseInsensitive]);


begin...end   (2004-08-03 18:19:00) [3]


> [11] [lamer]Barmaglot ©   (03.08.04 17:54)


> Бинарного поиска

Э-э... Ну, бинарный поиск для этой задачи, ИМХО, не катит. В общем случае, по крайней мере.


Sergey Kaminski   (2004-08-03 18:05:00) [4]

[lamer]Barmaglot ©   (03.08.04 17:54) [11]
А это не мне, а автору ветки надо было посоветовать. А не ругаться на Pos.

V l a d i m i r   (03.08.04 17:58) [12]
Если Pos подойдет, я его забираю! :)

Пользуй на здоровье! Он ОБЩИЙ :)))


V l a d i m i r   (2004-08-03 17:58:00) [5]

> Sandman25 ©

Так оно и есть. В верхней части окна располагается TTreeView с ограниченным количеством уровней (4 уровень - корень дерева). Так вот именно записи 4 (самого нижнего уровня) отображаются в гриде в нижней части окна... Выделяя родителя в дереве, в гриде отображаются все его дочерние записи 4 левела. Собственно SQL-й запрос выводит сразу все записи только при открытии окна, те когда выделен самый верхний родительский уровень, а уже далее продвигаясь по дереву количество записей грида изменяется.

Собственно, я уже в дебри зашел... Мне просто нужно составить поисковичок. Если Pos подойдет, я его забираю! :)


[lamer]Barmaglot   (2004-08-03 17:54:00) [6]

Запросто, начиная с уже сказанного Боуэра-Мура и Карпа-Рабина, Бинарного поиска и заканчивая более новыми, которые надо искать в книжках и журналах. дома лежит книга в ней более 30 алгоритмов точного поиска подстроки в строке...

подробнее здесь: http://algolist.manual.ru/search/index.php


Sandman25   (2004-08-03 17:49:00) [7]

А нефиг на форме иметь 10000 записей. Тут не фильтр нужен, а select c where.


Sergey Kaminski   (2004-08-03 17:47:00) [8]

[lamer]Barmaglot ©   (03.08.04 17:14) [6]
>
А что-нибудь побыстрее Pos'а посоветовать никак?

Посоветуй.


begin...end   (2004-08-03 17:43:00) [9]

КМП-поиск. Или, что лучше, алгоритм Боуера и Мура.

www.yandex.ru


V l a d i m i r   (2004-08-03 17:20:00) [10]

> [lamer]Barmaglot ©


> А что-нибудь побыстрее Pos'а посоветовать никак?


Если есть что-нибудь побыстрее POS'a, то я всеми руками за и весь во внимании...


[lamer]Barmaglot   (2004-08-03 17:14:00) [11]

Кошмар... А что-нибудь побыстрее Pos'а посоветовать никак? Он же напишет его в программу, а потом будет спрашивать, почему при 10000 записей он так долго ишет...


V l a d i m i r   (2004-08-03 16:27:00) [12]

Ок, спасибо! Осталось только проверить в работе... :)


Sergey Kaminski   (2004-08-03 15:32:00) [13]

Pos


V l a d i m i r   (2004-08-03 14:48:00) [14]

Я уточню: информация хранится в БД (Paradox) и выводится в DBGrid'е. Например, первая запись грида - сочный апельсин, вторая запись - вкусное яблоко и т.д. Задаю ключ поиска в форме поиска и необходимо найти ту запись, в которой встречается данное словосочетание. Проще говоря, будут две переменные типа String, одна из которых хранит название текущей записи, а другая ключ поиска. С помощью какой процедуры можно проверить, встречается ли в данном предложении искомая комбинация или нет? Если нет, то я перехожу к следующей записи и повторяю проверку... Существует ли такая стандартная функция по поиску в предложении комбинации слов? СПАСИБО ЗА ПОМОЩЬ!


Sergey_Masloff   (2004-08-03 14:35:00) [15]

Искать реализацию RegExp например
Или делать like '%xxx%'


Kurtevich   (2004-08-03 14:33:00) [16]

тю дык Pos('око', 'вкусное яблоко');


Наверх

Титульная страница Поиск, карта сайта Написать письмо