Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по каждому слову. 
:(
    Опции темы
Sergmzk
Дата 2.4.2008, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



Добрый день.
Подскажите, не могу сообразить, в RicheDit набран какой то текст, нужно перебирая все слова сверить их с базой, по первому я сделал так, а как сделать чтобы он перебирал по каждому слову.


Код

procedure TForm1.Button1Click(Sender: TObject);
var 
  StartPos, Position, Endpos, i: Integer;
  SearchText, f1: string;
begin

//------------------------------------------
f1:=leftStr(RichEdit1.Text,Pos(' ',RichEdit1.Text)-1);
SearchText:=f1;
StartPos := 0;
  with RichEdit1 do
  begin
   Query1.First;
    Endpos := Length(RichEdit1.Text);
    Lines.BeginUpdate;
    while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do
    begin
      Endpos   := Length(RichEdit1.Text) - startpos;
      Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
    begin
      for i:=1 to Query1.RecordCount do
      begin
        if Query1['TXT1']=SearchText then
        Memo1.Text:=Query1['P_K'];
        Query1.Next;
      end;
    end;
      Inc(StartPos, Length(SearchText));
      SetFocus;
      SelStart  := Position;
      SelLength := Length(SearchText); 
    end;
    Lines.EndUpdate;
  end;
//-------------------------------------------

end;




M
Alexeis
Модератор: используйте подсветку кода.


Это сообщение отредактировал(а) Alexeis - 2.4.2008, 16:30
PM MAIL   Вверх
1Andrey1
Дата 2.4.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 8.9.2007

Репутация: 2
Всего: 4



я решал подобную задачу при помощи компонента RegExpr, в итоге получается нечто похожее на это:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
RegExpr : TRegExpr;
i:integer;
begin
RegExpr := TRegExpr.Create();//создаем экземпляр TRegExpr
RegExpr.Expression := ' ';//в качестве регулярного выражения(у нас - разделителя) задаем пробел
regexpr.Split(RichEdit1.Text,memo1.Lines);// в каждую строку memo добавляем каждое слово после пробела

for I := 0 to memo1.Lines.Count - 1 do
  begin  //перебираем все строки и для каждой делаем запрос в базу на SQL
    Query1.Active:=false;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT *');//показать всё
    Query1.SQL.Add('FROM tablename');//из таблицы "tablename"
    Query1.SQL.Add('WHERE fieldname LIKE '''+memo1.Lines[i]+'''');//если поле "fieldname" содержит memo1.Lines[i] 
    Query1.Active:=true;

{Здесь можно проверить, если recordcount у Query больше ноля, значит такое слово в базе есть}
  end;
end;


Надеюсь я правильно понял вопрос...

Это сообщение отредактировал(а) 1Andrey1 - 2.4.2008, 12:26
PM MAIL ICQ   Вверх
MetalFan
Дата 2.4.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(1Andrey1 @  2.4.2008,  12:19 Найти цитируемый пост)
нечто похожее на это:

только бы убить еще не забыть TRegExpr созданный. а вообще есть в них функция SplitRegExpr


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
1Andrey1
Дата 2.4.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 8.9.2007

Репутация: 2
Всего: 4



Цитата(MetalFan @  2.4.2008,  12:35 Найти цитируемый пост)
только бы убить еще не забыть TRegExpr созданный. а вообще есть в них функция SplitRegExpr


ну тогда, нечто похожее на это smile

Код

procedure TForm1.Button1Click(Sender: TObject);
var
RegExpr : TRegExpr;
i:integer;
begin
RegExpr := TRegExpr.Create();
SplitRegExpr(' ',RichEdit1.Text,memo1.Lines);
RegExpr.Free;
for I := 0 to memo1.Lines.Count - 1 do
  begin
    Query1.Active:=false;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT * FROM tablename WHERE artist LIKE '''+memo1.Lines[i]+'''');
    Query1.Active:=true;
    {необходимые проверки и действия}
  end;
end;


там еще многое будет зависеть от текста набранного в RichEdit, если например в тексте будут служебные символы или знаки препинания, то от них прийдется заранее избавляться отдельной процедуркой

Это сообщение отредактировал(а) 1Andrey1 - 2.4.2008, 12:49
PM MAIL ICQ   Вверх
Rennigth
Дата 2.4.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(1Andrey1 @  2.4.2008,  12:44 Найти цитируемый пост)
ну тогда, нечто похожее на это 

ну тогда нечто похожее на ЭТО  smile 
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  SplitRegExpr(' ',RichEdit1.Text, memo1.Lines);
  for I := 0 to memo1.Lines.Count - 1 do
  begin
    Query1.Active:=false;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT * FROM tablename WHERE artist LIKE '''+memo1.Lines[i]+'''');
    Query1.Active:=true;
    {необходимые проверки и действия}
  end;
end;




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
1Andrey1
Дата 2.4.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 8.9.2007

Репутация: 2
Всего: 4



Цитата(Rennigth @  2.4.2008,  12:49 Найти цитируемый пост)
ну тогда нечто похожее на ЭТО  


ух ты, точно smile
PM MAIL ICQ   Вверх
MetalFan
Дата 2.4.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



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


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Sergmzk
Дата 3.4.2008, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



Большое спасибо, помогло, накоплю постов - прибавлю репутацию.
PM MAIL   Вверх
Sergmzk
Дата 3.4.2008, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



Так а можно ещё спросить, а как можно в этом случае ещё разделять слова если и точка и пробел и запятая к примеру или дополнительно ещё раз текст прогонять.


update
всё оказалось очень просто. спасибо ещё раз.

Это сообщение отредактировал(а) Sergmzk - 3.4.2008, 08:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.