![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Необходимо искать определенные слова в тексте и заменять их на другие.Проверка должна проходить одновременно по всем словам(а не сначала один,потом другой и т.д)
Подскажите как такое реализовать.Пробывал разные варианты,но там проверка и замена по одному слову,а необходимо сразу несколько. Заранее спасибо. |
#2
|
||||
|
||||
![]() При линейном выполнении кода ваше желание неосуществимо, если-же использовать потоки, то можно, но нужно-ли для простой операции городить огород? Какой объем текста предполагается и как часто это будет происходить.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
![]() Текст максимум 10000 знаков.
Нашел решение,хоть не идеальное,но все же. RichEdit2.lines.text:=StringReplace(RichEdit2.line s.text , 'слово которое заменяем' , 'заменяемое слово' ,[rfreplaceall]); |
#4
|
||||
|
||||
![]() Цитата:
Не твори зла, и жизнь повернется к тебе передом ![]() |
#5
|
||||
|
||||
![]() Незнаю посмотрел вроде все ок работает.Все слова заменяются.Правда слов много,поэтому код огромный получится.А так все работает.
Вот пример Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, RyMenus, ComCtrls; type TForm1 = class(TForm) Button1: TButton; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N11: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; OpenDialog1: TOpenDialog; RichEdit1: TRichEdit; RichEdit2: TRichEdit; Button2: TButton; Button3: TButton; Button4: TButton; Label1: TLabel; Label2: TLabel; Button5: TButton; procedure N2Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button1Click(Sender: TObject); private MyOtherDrawer: TRyMenu; StartMenu: TRyMenu; { Private declarations } public constructor Create(AOwner: TComponent); override; { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} constructor TForm1.Create(AOwner: TComponent); begin inherited; RyMenu.Add(MainMenu1); // RyMenu.Add(PopupMenu1); - текст не убирать нужен )) MyOtherDrawer:=TRyMenu.Create(Self); MyOtherDrawer.SelectedColor:=clRed; MyOtherDrawer.MenuColor:=clLime; MyOtherDrawer.GutterColor:=clBlue; MyOtherDrawer.Font.Name:='Comic Sans MS'; MyOtherDrawer.Font.Size:=9; MyOtherDrawer.Add(MainMenu1) end; procedure TForm1.N2Click(Sender: TObject); begin If OpenDialog1.Execute then begin RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); end; end; procedure TForm1.N6Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin If OpenDialog1.Execute then begin RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); end; end; procedure TForm1.Button3Click(Sender: TObject); begin richedit1.Lines.Clear; end; procedure TForm1.Button4Click(Sender: TObject); begin RichEdit2.Lines.Clear; end; procedure TForm1.Button1Click(Sender: TObject); begin RichEdit2.lines:=RichEdit1.lines; RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'привет' , 'здравствуйте' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'помощь' , 'поддержка' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'несложной' , 'легкой' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'покупка' , 'приобретение' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'представлялась' , 'казалась' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'наших' , 'своих' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'не представляли себе' , 'даже не думали' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'процессе' , 'ходе' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'деньги' , 'наличные' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'найти' , 'отыскать' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'однако' , 'но все же' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'квартиру' , 'жилье' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'обнаруживаем' , 'находим' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'квартиры' , 'жилья' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'денег' , 'финансов' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'деньги' , 'финансы' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'меньше' , 'менее' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'покупку' , 'приобретение' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'обнаруживаем' , 'находим' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'вдруг' , 'внезапно' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'обнаруживаем' , 'находим' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'мечта' , 'лучшее о чем можно было думать' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'Помощь' , 'Поддержка' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'квартира' , 'жилье' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'юритс' , 'юрисконсульт' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'юриста' , 'юрисконсульта' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'юристу' , 'юрисконсульту' ,[rfreplaceall]); RichEdit2.lines.text:=StringReplace(RichEdit2.lines.text , 'квартире' , 'жилью' ,[rfreplaceall]); end; end. Последний раз редактировалось Admin, 12.09.2010 в 16:16. |
#6
|
||||
|
||||
![]() Теперь вопрос в другом как сделать так что-бы слово не зависело от регистра(тоесть,будь оно с маленькой буквы или с большой)?????
P.S И еще бы хотелось реализовать выделение замененных слов другим цветом. Последний раз редактировалось thinker89, 12.09.2010 в 00:53. |
#7
|
||||
|
||||
![]() |
#8
|
||||
|
||||
![]() Мемо для выделения слов не подходит. Используйте RichEdit. Вот пример работы с этим компоненттом:
Код:
procedure TForm1.AddBookLine( Author, Title, Publisher, Year : string); var Indent : integer; begin with RichEdit1 do begin Lines.Add(''); // add blank line SelStart := SelStart - 2; // before final CRLF {add Author} SelAttributes.Style := []; // Style is a set so enclose all styles in square brackets SelText := Author + '. '; // SetStart is now positioned after inserted text {add Title} SelAttributes.Style := [fsItalic]; SelText := Title + '. '; {add Publisher} SelAttributes.Style := [fsBold]; SelText := Publisher + '. '; {add Year} SelAttributes.Style := []; SelText := Year + '.'; {set Paragraph indents} Indent := (Parent as TForm).Canvas.TextWidth(' '); // pixel width of 10 spaces Paragraph.LeftIndent := Indent; Paragraph.FirstIndent := -Indent; end; {with RichEdit1} end; procedure TForm1.Button1Click(Sender: TObject); begin AddBookLine('Alan Lloyd', 'RichEdit Revealed', 'Delphi Document Press', '2000'); end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
||||
|
||||
![]() Страдалецъ спасибо.Из моего примера выше видно,что использовал RichEdit.
dr. F.I.N так же спасибо за rfIgnoreCase P.S Пробывал изменять другим цветом те слова которые заменились,что-то не как не ввыходит.Может подскажите как это реализовать? Последний раз редактировалось thinker89, 12.09.2010 в 11:13. |
#10
|
||||
|
||||
![]() В общем я вам наваял пример, как я это вижу. На мой взгляд удобнее вынести ваши слова в xml-файл и подключаться к нему как к источнику данных. Удобство в том, что мы разгружаем код и получаем возможность извне, не собирая заново программу, управлять словарем замен т.к. он в текстовом виде.
ПС: Возможно там имеет смысл направление сортировки поменять. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 13.09.2010 в 10:24. |
#11
|
||||
|
||||
![]() Спасибо за исходник,будем пробывать.
|