|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
richedit. Замена слов.
Друзья, такой вопрос. Как лучше реализовать замену слов в ричэдите? К примеру если в тексте встречается "abc" то заменить его на "абв". То есть у меня есть 2 тхт файла. в первом тхт собрана база слов которых надо заменить в тексте. База выглядит след.образом:
abc wellcom friend work etc. И второй тхт в котором собрана база слов на которое должны заменяться: абв добро пожаловать друг работа и.т.д Я так думаю что для начала, нужно поставить на форму 3 ричэдита. В 1ый мы будем грузить собственно сам текст в котором будет происходить поиск. А в остальные 2 ричэдита загрузить наши две базы. Затем в цикле сделать поиск подходящих слов и к примеру сделать подсветку найденных слов(РИЧЭДИТ-2). Далее примерно по такому же принципу уже заменить найденные слова на нужные из ричэдит 3. Спасибо! |
#2
|
||||
|
||||
Цитата:
|
#3
|
||||
|
||||
=)
Почему в ричэдит2? в ричэдит 1 делаем подсветку, так как в ричэдите 1 находится текст в котором мы ищем нужные слова, а в ричэдите 2 у нас находятся слова которые нужно найти в ричэдите 1. А в ричэдите 3 слова на которые надо заменить найденые слова. щас я небольшую картинку прикреплю так я думаю понятней будет.
|
#4
|
||||
|
||||
Цитата:
У TRichEdit есть метод FindText. Делаем цикл for для каждого слова которое нужно найти. Внутри этого цикла делаем цикл while который выполняем пока FindText находит текущее слово, при это заменяем его на то, на которое нужно заменить. p.s. Перед всем этим желательно сделать: Код:
RichEdit1.Lines.BeginUpdate; // чтобы не тормозило при каждой замене // а после этого сделать: RichEdit1.Lines.EndUpdate. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
borockov (12.09.2012)
|
#5
|
||||
|
||||
=)
Цикл для каждого слова? а если у меня 1000 слов, я должен буду написать тысячу циклов? Можешь коротенький примерчик просто я незнаю как внутри цикла for использовать while, по отдельности я знаю как использовать эти циклы, но вместе как то не использовал.
|
#6
|
||||
|
||||
Цитата:
Цитата:
Код:
var i: Integer; FindWord: string; pos: Integer; begin RichEdit1.Lines.BeginUpdate; try for i := 0 to RichEdit2.Lines.Count - 1 do begin FindWord := RichEdit2.Lines[i]; pos := 0; while True do begin pos := RichEdit1.FindText(FindWord, pos, Length(RichEdit1.Text) - pos, []); if pos < 0 then Break; RichEdit1.SelStart := pos; RichEdit1.SelLength := Length(FindWord); RichEdit1.SelText := RichEdit3.Lines[i]; Inc(pos); end; end; finally RichEdit1.Lines.EndUpdate; end; end; И вот ещё что: RichEdit2 и RichEdit3 используй только если тебе нужно чтобы пользователь видел эти списки, если же их не нужно показывать, то лучше используй вместо этого TStringList. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
borockov (12.09.2012)
|
#7
|
||||
|
||||
=)
Большое спасибо=) щас посмотрю, списки должны быть видны пользователю, так как он будет иметь возможность дополнить базу слов=) которых надо найти и которыми надо заменить=)
|
#8
|
||||
|
||||
=)
Друг, а куда писать этот код? чё то я не могу у richedit1 найти "findtext"
|
#9
|
||||
|
||||
=)
Ааа блин это же метод=) ссори всё разобрался=)
|
#10
|
||||
|
||||
Цитата:
Цитата:
Цитата:
|