Как выделить и заменить определенное слово в memo?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как выделить и заменить определенное слово в memo?

Сообщение AlexGordon » 08.01.2011 23:46:55

Например, при нажатии на кнопку должно искаться слово pipes в memo, и заменяться на trubi.
Причем, если текст мемо следующий:

Код: Выделить всё
pipes
asdasd
gdgsff
asdda pipes asdasd
asdasd


То должно получиться следущее:

Код: Выделить всё
trubi
asdasd
gdgsff
asdda trubi asdasd
asdasd


т.е. искаться и заменяться должно по всему memo. Как это сделать?
AlexGordon
новенький
 
Сообщения: 28
Зарегистрирован: 07.12.2010 21:02:15

Re: Как выделить и заменить определенное слово в memo?

Сообщение Padre_Mortius » 08.01.2011 23:50:22

Предполагаю, что стоит рассматривать содержимое Memo как TStringList (чем оно по сути и является), а дальше уже заниматься разбором каждой строки в отдельности.
И в модуле StrUtils есть много интересных функций и процедур по замене фрагментов текста (например, AnsiReplaceText)
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Как выделить и заменить определенное слово в memo?

Сообщение AlexGordon » 08.01.2011 23:51:22

А поподробнее?
AlexGordon
новенький
 
Сообщения: 28
Зарегистрирован: 07.12.2010 21:02:15

Re: Как выделить и заменить определенное слово в memo?

Сообщение Padre_Mortius » 09.01.2011 00:00:09

Код: Выделить всё
var
  i: integer;
  S:AnsiString;
begin
for i:=0 to Memo1.Lines.Count -1 do
begin
  S := '';
  S := AnsiReplaceText(S, 'pipes', Memo1.Lines[i]);
  Memo1.Lines[i] := S;
end;


что-то типа такого. писалось сразу в браузере, т.е. могут быть ошибки
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Как выделить и заменить определенное слово в memo?

Сообщение Nik » 09.01.2011 00:30:41

Можно и всё содержимое Memo рассматривать как одну строку - Memo.Lines.Text. Замена - аналогично предложенному Padre_Mortius.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Как выделить и заменить определенное слово в memo?

Сообщение Kubanych » 09.01.2011 08:32:21

Можете посмотреть примеры к моей книге http://freepascal.ru/download/zips/windows-samples.7z. В папке \Примеры\К главе 6\TMemo. Там рассмотрены способы организации поиска в TMemo. Найденный фрагмент текста выделяется.
Способ замены - как предложил Padre_Mortius.
Kubanych
новенький
 
Сообщения: 73
Зарегистрирован: 15.10.2008 10:02:18

Re: Как выделить и заменить определенное слово в memo?

Сообщение AlexGordon » 09.01.2011 21:30:54

Padre_Mortius, а что твой код заменяет словом Pipes? я не понял просто
AlexGordon
новенький
 
Сообщения: 28
Зарегистрирован: 07.12.2010 21:02:15

Re: Как выделить и заменить определенное слово в memo?

Сообщение Iv_ » 10.01.2011 16:40:01

AlexGordon писал(а):Padre_Mortius, а что твой код заменяет словом Pipes? я не понял просто

Я так понимаю, что - пробел.
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: Как выделить и заменить определенное слово в memo?

Сообщение Odyssey » 10.01.2011 17:12:36

Нет. В коде ошибка (а об ошибках Padre_Mortius честно предупредил). Чтобы понять, нужно смотреть документацию по AnsiReplaceText. Там написано, в вольном переводе, следующее:
Код: Выделить всё
function AnsiReplaceText(
  const AText: String;
  const AFromText: String;
  const AToText: String
):String;

Параметры:

AText -- Строка, в которой производится поиск и замена.
AFromText -- Строка, которую нужно найти
AToText -- Строка, на которую нужно заменить

Т.е. правильно будет:
Код: Выделить всё
var
  i: integer;
begin
  for i := 0 to Memo1.Lines.Count - 1 do
    Memo1.Lines[i] := AnsiReplaceText(Memo1.Lines[i], 'pipes', 'trubi');
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Как выделить и заменить определенное слово в memo?

Сообщение debi12345 » 10.01.2011 21:43:06

RegExpr использовать не пробовали ?
(ессно, не RTL-овский, а более навороченный - модуль приаттачен )

function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr : RegExprString;
AUseSubstitution : boolean{$IFDEF DefParam}= False{$ENDIF}) : RegExprString; //###0.947
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

Рейтинг@Mail.ru