Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: Ekz 
Форум » Все о Delphi » Синтаксис » Поиск всех одинаковых слов в Memo
Поиск всех одинаковых слов в Memo
monstryugaДата: Воскресенье, 25.04.2010, 08:17 | Сообщение # 1
Ранг 1
Группа: Проверенные
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Доброго времени суток. Проблема такая, веду поиск по стандартной схеме :
Code
var
Find:string; // Искомая строка
i:integer; // Счетчик для цикла
LineNum : LongInt;//номер строки
CharNum : LongInt;//номер символа
procedure TForm1.Button1Click(Sender: TObject);
begin
find:={переменная}; // Записываем в find текст из
For i:=0 to Memo1.Lines.Count-1 do // Запускаем цикл поиска строки
If Pos(FIND, Memo1.Lines.Text)<>0
Then
Begin
Memo1.SetFocus();
Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
Дальне хочу вставить найденные одинаковые строки в другое поле Memo:
{Получаем номер строки}
LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
{Получаем позицию в строке}
CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0);
{Выводим позицию на экран}
Form1.Caption := IntToStr(LineNum)+' : '+IntToStr((Memo1.SelStart-CharNum));//это мне нужно для определения места положения курсора. Просто для себя.
Memo2.Lines.Add(Memo1.Lines[LineNum]);
Программа выдает именно ту строку, которая заданна в переменной find, но только именно столько раз, сколько содержится строк в Memo1. find изменять нельзя, нужны все строки с одинаковым словом(в строке могут присутствовать и другие слова). Необходимо изменить место старта поиска, вместо :
Code
For i:=0 to Memo1.Lines.Count-1 do

надо прописать место остановки первого поиска +1, и новый старт.
Не могу уже второй день добится sad .
Помогите чем можете, пожалуйста.
 
AdminДата: Воскресенье, 25.04.2010, 12:02 | Сообщение # 2
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Quote (monstryuga)
Программа выдает именно ту строку, которая заданна в переменной find, но только именно столько раз, сколько содержится строк в Memo1.

Сначала не понял про че ты говориш. Вобщем если находится совпадение, то его выводит N раз, где N-количество строк в Memo1.

На скоьлко я понял, нужно чтобы программа нашла все совпадения в тексте. Так?

Ну во первых я бы цикл сделал с Begin, так сразу видно границы, хоть ничего и не изменится, но все же так мне удобнее. Ну и незнаю зачем ты получал номер строки, выделял, и т.д. Можно намного проще:

Code
var s:string;
begin
find:='sd';
For i:=0 to Memo1.Lines.Count-1 do
begin
   s := Memo1.Lines[i];
   If Pos(FIND, s)<>0 Then
     Memo2.Lines.Add(s);
end;


Не оказываю помощь через личные сообщения и ICQ
 
monstryugaДата: Воскресенье, 25.04.2010, 22:14 | Сообщение # 3
Ранг 1
Группа: Проверенные
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Quote (Admin)
find:='sd';
For i:=0 to Memo1.Lines.Count-1 do
begin
s := Memo1.Lines[i];
If Pos(FIND, s)<>0 Then
Memo2.Lines.Add(s);
end;

Все гениальное просто!!! biggrin Спасибо огромное за такой быстрый и отличный ответ! все упростилось в разы! Прошлый код я использовал потому, что не знал как реализовать поиск слова в Memo. Вот и изворачивался потом из этого sad . А теперь все работает как часы. Как прогу закончу, обязательно тебя включу в благодарности, и сайт упомяну. Еще раз огромное спасибо!
А эту фразу я потом удалю, скажи пожалуйста, как ты код вставляешь?


Сообщение отредактировал monstryuga - Воскресенье, 25.04.2010, 22:23
 
AdminДата: Воскресенье, 25.04.2010, 22:25 | Сообщение # 4
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Ну вот и хорошо, обращайтесь еще.
Да у вас просто прав не хватает. Вы же только зарегистрировались, вот и в группе пользователи находитесь.


Не оказываю помощь через личные сообщения и ICQ
 
monstryugaДата: Воскресенье, 25.04.2010, 22:31 | Сообщение # 5
Ранг 1
Группа: Проверенные
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
Quote (Admin)
Да у вас просто прав не хватает. Вы же только зарегистрировались, вот и в группе пользователи находитесь.

Понятненько smile
 
Форум » Все о Delphi » Синтаксис » Поиск всех одинаковых слов в Memo
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2018
Хостинг от uCoz