Delphi 7 поиск в строке
Автор Дмитрий DeKoS задал вопрос в разделе Другие языки и технологии
[Delphi] Как сделать поиск точного слова ? и получил лучший ответ
Ответ от Oleh_Huz'[гуру]
Ответ от Gennady[гуру]
Олег, по этой ссылке находится студенческая поделочка, возвращающая ПЕРВОЕ вхождение подстроки в текст мемо. Да еще делающая это многократно. И кочует это уродство по сети уже больше пятилетки.
Что касается вопроса, то можно попробовать сделать, например, так
Find := Edit1.Text; // текст для поиска
i := 1; // начальная позиция поиска
while PosEx(Find, Memo1.Lines.Text, i) <> 0 do begin
i := PosEx(Find, Memo1.Lines.Text, i);
// здесь i содержит позицию очередного вхождения подстроки в текст
// и можно делать с ней все, что угодно, например, "записать в переменную"
i := i + 1; // смещаем позицию
end;
Если вас интересуют строки, на которых расположены искомые подстроки, то в цикле по строкам мемо ищите нужный фрагмент.
For i:=0 to Memo1.Lines.Count-1 do
If Pos(Find, Memo1.Lines[i] <> 0 then begin
j := Pos(Find, Memo1.Lines[i]);
// в j позиция подстроки в i-й строке мемо
// работаете с найденной подстрокой
end;
Примерно так.. .
И еще. Дмитрий, я бы посоветовал вам более внятно формулировать проблему. Довольно трудно из вашего описания понять, что же все-таки вам надо.
Олег, по этой ссылке находится студенческая поделочка, возвращающая ПЕРВОЕ вхождение подстроки в текст мемо. Да еще делающая это многократно. И кочует это уродство по сети уже больше пятилетки.
Что касается вопроса, то можно попробовать сделать, например, так
Find := Edit1.Text; // текст для поиска
i := 1; // начальная позиция поиска
while PosEx(Find, Memo1.Lines.Text, i) <> 0 do begin
i := PosEx(Find, Memo1.Lines.Text, i);
// здесь i содержит позицию очередного вхождения подстроки в текст
// и можно делать с ней все, что угодно, например, "записать в переменную"
i := i + 1; // смещаем позицию
end;
Если вас интересуют строки, на которых расположены искомые подстроки, то в цикле по строкам мемо ищите нужный фрагмент.
For i:=0 to Memo1.Lines.Count-1 do
If Pos(Find, Memo1.Lines[i] <> 0 then begin
j := Pos(Find, Memo1.Lines[i]);
// в j позиция подстроки в i-й строке мемо
// работаете с найденной подстрокой
end;
Примерно так.. .
И еще. Дмитрий, я бы посоветовал вам более внятно формулировать проблему. Довольно трудно из вашего описания понять, что же все-таки вам надо.
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: [Delphi] Как сделать поиск точного слова ?