Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2007, 16:28   #1
KirkMETAL
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
Вопрос Проблема поиск и замена текста(Delphi)

Подскажите, что нужно исправить в этом коде, чтобы был правильный поиск и замена. Проблема в том, что ищет вроде нормально, но есть один глюк, вводишь например "Найти: 2 Заменить на: 82" и цикл начинает идти по кругу до бесконечности.
Код:
procedure TForm1.ReplaceClick(Sender: TObject);
begin
  If n>0 then
  With ActiveMDIChild as TForm2 do
  begin
  SPOS:=Memo1.SelStart;
  With ReplaceDialog1 do
    begin
      FindText:=Memo1.SelText;
      Position:=Point(Form1.Left,Form1.Top+Memo1.Top+Memo1.Height);
      Options:=Options+[frHideUpDown,frHideWholeWord];
      Execute;
    end;
  end;
end;
Код:
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
begin
  With ActiveMDIChild as TForm2 do
  begin
  If Memo1.SelText<>'' then Memo1.SelText:=ReplaceDialog1.ReplaceText;
  If frReplaceAll in ReplaceDialog1.Options then begin
    If s=1 then  begin
      s:=0;
      Exit;
      end
      else
      ReplaceDialog1Find(Self);
      ReplaceDialog1Replace(Self);
    end;
  end;
end;
Код:
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var a:integer;
begin
  a:=0;
  With ActiveMDIChild as TForm2 do
  begin
  with ReplaceDialog1 do begin
    if frMatchCase in Options then
      a:=Pos(FindText,Copy(Memo1.Lines.Text,SPOS+1,Length(Memo1.Lines.Text)))
      else
      a:=Pos(AnsiLowerCase(FindText),AnsiLowerCase(Copy(Memo1.Lines.Text,SPOS+1,Length(Memo1.Lines.Text))));
    Memo1.SelStart:=a+SPOS-1;
    If a>0 then begin
      Memo1.SelLength:=Length(FindText);
      SPOS:=Memo1.SelStart+Memo1.SelLength;
      end
    Else if MessageDlg('Текст "'+FindText+'" не найден. Продолжить диалог?',mtConfirmation,mbYesNoCancel,0)<>mrYes then begin s:=1; CloseDialog; end
       else begin SPOS:=0; s:=1; end;
      end;
  Form1.SetFocus;
  end;
end;
KirkMETAL вне форума Ответить с цитированием
Старый 26.11.2007, 16:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А чегоб тебе не сделать так:

от и:=0 до Мемо.Линес.Соунт-1 делать
Мемо.линес[и]:=StringReplase(Мемо.линес[и],'2','82',[rfReplaceAll]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2007, 17:25   #3
KirkMETAL
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
По умолчанию

Это вот здесь надо менять?
Код:
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
begin
  With ActiveMDIChild as TForm2 do
  begin
  If Memo1.SelText<>'' then Memo1.SelText:=ReplaceDialog1.ReplaceText;
  If frReplaceAll in ReplaceDialog1.Options then begin
    If s=1 then  begin
      s:=0;
      Exit;
      end
      else
      ReplaceDialog1Find(Self);
      ReplaceDialog1Replace(Self);
    end;  end;
end;
KirkMETAL вне форума Ответить с цитированием
Старый 27.11.2007, 00:02   #4
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
По умолчанию

StringReplace - готовая функция
---
GAGARIN-NEW вне форума Ответить с цитированием
Старый 26.07.2010, 08:41   #5
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

procedure TForm4.ReplaceDialog1Find(Sender: TObject);
begin
with Sender as TReplaceDialog do
while True do
begin
if Memo1.SelText <> FindText then
FindDialog1Find(Sender);
if Memo1.SelLength = 0 then Break;
Memo1.SelText:= ReplaceText;
if not (frReplaceAll in Options) then Break;
end;
end;
procedure TForm4.ReplaceDialog1Replace(Sender : TObject);
label 10;
begin
Memo1.HideSelection:=true;
10:
if pos(ReplaceDialog1.FindText,Memo1.T ext)<>0 then
begin
Memo1.SelStart:=pos(ReplaceDialog1. FindText,Memo1.Text)-1;
Memo1.SelLength:=Length(ReplaceDial og1.FindText);
Memo1.SelText:=ReplaceDialog1.Repla ceText;
goto 10;
end;
Memo1.HideSelection:=false;
end;
end.
ZvEr_HaCkEr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст. ред. Поиск и замена Славный Общие вопросы Delphi 4 25.06.2008 20:09
Поиск и замена файлов steo_ler Помощь студентам 5 08.10.2007 15:01
Поиск и замена текста в файле VAbramyak Общие вопросы Delphi 3 04.04.2007 20:20
поиск и замена текста в RichEdit Vasya Помощь студентам 11 16.03.2007 06:48
замена текста zetrix Microsoft Office Excel 0 31.10.2006 07:54