![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Спасибо за исходник,будем пробывать. 
		
	
		
		
		
		
		
	
		
		
	
	
	 |