![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |