Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
ProgLab
24 / 24 / 0
Регистрация: 09.11.2010
Сообщений: 190
1

Реализация алгоритма поиска и выделения слов

08.08.2011, 19:09. Просмотров 2501. Ответов 3
Метки нет (Все метки)

Привет всем, я тут набросал алгоритм для поиска и выделения слов в тексте RichEdit. Но реализовать его затрудняюсь. Вот алгоритм:
Искать в тексте Richedit слова из текстового файла которые загружены в memo и выделять их синим цветом.
C начала ищеться первое слово из memo в тексте Richedit, если оно найдено, то выделить его синим цветом, и продолжать поиск со следуюшей за найденным словом позиции до следующего совпадения или до конца текста. Если до конца текста искомое слово не найдено, то взять следующее слово из memo и начать поиск с начала текста. Если все слова в memo использованы для поиска, то закончить поиск.

Начал я вот с чего...
Delphi
1
2
3
4
5
6
7
8
9
10
procedure Tfmmain.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
for i := 0 to momap.Lines.Capacity do begin
cp := pos(AnsiLowerCase(momap.Lines[i]),AnsiLowerCase(richedit1.Text));
if cp <> 0 then richedit1.SelStart;
richedit1.SelAttributes.Color := clBlue;
end;
end;
end.
но даже этот маленький кусочек не хочит хотя бы выделить найденные слова. У меня нет вообще никаких идей... Ничего не работает... помогите реализовать алгоритм. Заранее спосибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2011, 19:09
Ответы с готовыми решениями:

Реализация алгоритма "Решето Сундарама" для поиска простых чисел
Возникла необходимость реализации алгоритма поиска простых чисел. Знаю, что...

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

Реализация алгоритма МТ
Прибавление единицы к двоичному числу 1q1-&gt;1q1R 0q1-&gt;0q1R Bq1-&gt;Bq2L...

7.Реализация разветвляющегося алгоритма
Написать программу для реализации разветвляющегося алгоритма (на delphi в...

Реализация алгоритма Дейкстры в Делфи
В универе пришла необходимость реализовать алгоритмы Флойда и Дейкстры. С...

3
antikiler_
1080 / 566 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
08.08.2011, 23:01 2
Цитата Сообщение от ProgLab Посмотреть сообщение
но даже этот маленький кусочек не хочит хотя бы выделить найденные слова
Так будет
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure Tfmmain.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
for i := 0 to momap.Lines.Capacity-1 do 
begin
cp := pos(AnsiLowerCase(momap.Lines[i]),AnsiLowerCase(richedit1.Text))-1;
if cp <> 0 then
begin
richedit1.SelStart := cp; // устанавливаем позицию с которой надо начинать выделение
richedit1.SelLength:=(Length(memo1.Lines.Strings[i])); // длина выделяемого текста
richedit1.SelAttributes.Color := clBlue;
end;
end;
end.
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
08.08.2011, 23:19 3
Предлагаю сделать так. В тексте RichEdit выполняется поиск заданного слова. Все найденные слова выделяются жирным шрифтом и бордовым цветом:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure TForm1.Button1Click(Sender: TObject);
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, sW, sWord : String;
  i, p1, Len, LenW : Integer;
begin
  //Искомое слово, буквы которого преобразованы к заглавным.
  sWord := AnsiUpperCase(Edit1.Text);
  //Текст из RichEdit.
  S := RichEdit1.Text;
 
  Len := Length(S);
  p1 := 0;
  for i := 1 to Len do begin
    //Пропускаем разделители.
    if S[i] in D then Continue;
    //Отслеживаем позицию начала слова.
    if (i = 1) or (S[i - 1] in D) then p1 := i;
    //Отслеживаем позицию конца слова.
    if (i = Len) or (S[i + 1] in D) then begin
      //Извлекаем слово и делаем его буквы заглавными.
      LenW := i - p1 + 1;
      sW := AnsiUpperCase( Copy(S, p1, LenW) );
      //Сравниваем слово с шаблоном.
      if sW = sWord then begin
        //Выделяем найденное слово жирным шрифтом и бордовым цветом.
        RichEdit1.SelStart := p1 - 1;
        RichEdit1.SelLength := LenW;
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsBold];
        RichEdit1.SelAttributes.Color := RGB(200, 0, 0);
      end;
    end;
  end;
end;
0
antikiler_
1080 / 566 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
08.08.2011, 23:26 4
Зачем изобретать трёхколесный самокат?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 23:26

Графическая реализация алгоритма Дейкстра
Алгоритм у меня есть, работает, а вот по поводу графического не знаю с чего...

Реализация алгоритма Хаффмана ( до 1ой стадии )
Здравствуйте. Нужно реализовать алгоритм Хаффмана до 1ой части, то есть каждой...

Трудности с пониманием алгоритма фибоначчиева поиска
Не понимаю, что означает &quot;Обмен (P,H) с (H,P-H)&quot;. Какие действия нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru