Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Помогите пожалуйста новечку!!   Найти похожие ветки 

 
Новичечек   (2006-01-15 19:10) [0]

Я написал программу которая должна делать с текстом следующее :
1) Находить и заменять определенные строки другими
2) Раскрашивать потом текст так как надо.

программа работает, все нормально, но у нее вознает ощибка - "Stek Overlow" если количество обрабатываемых строк больше 14.000.
А у меня быват их не по 14.000 а по 70.000.
Помогите разобраться пожалуйста почему возникает ошибка.

И еще... может быть есть более простой и быстрый способ поиска\замены строк в тексте чем тот что я использовал??
Помогите пожалуйста, очень надо!
Если нужно, то вот те процедуры которые я написал для поиска и замены строк:


procedure Tform1.Replase_All_Log;
var
Fu,Tu,  k : integer;
p : Tpoint;
s, RuS : string;
i,l : integer;
begin
Application.ProcessMessages();
i := strtoint(form1.Caption);

  s := RichEdit1.Lines.Strings[i];
  l := length(s);

  Fu := Pos(FromU, s);
  Tu := Pos(ToU, s);

  if Fu<>0 then
   begin
     k := Fu;
     RuS := FromRepl;
   end else
  if Tu<>0 then
   begin
     k := Tu;
     RuS := ToRepl;
   end else
              begin
               i:= i+1;
               form1.Caption := inttostr(i);
               Application.ProcessMessages();

                     If i = RichEdit1.Lines.Count -1 then
                            begin
                              Form1.Enabled := true;
                              Label2.Visible := false;
                              exit;
                            end else
               Replase_All_Log;
               exit;
              end;

  if k<>0 then
              begin
                 p.Y := i;
                 p.X := k-1;
                 richEdit1.CaretPos := p;
                 RichEdit1.SelLength := (l-k)+1;
                 Application.ProcessMessages();
                 RichEdit1.SelText := Rus;
                 Application.ProcessMessages();

                 i:= i+1;
                 form1.Caption := inttostr(i);
                 Application.ProcessMessages();
                 

                 If i = RichEdit1.Lines.Count -1 then
                            begin
                              Form1.Enabled := true;
                              Label2.Visible := false;
                              exit;
                            end else
                 Replase_All_Log;
                 exit;
              end
                else
              begin
               i:= i+1;
               form1.Caption := inttostr(i);
               Application.ProcessMessages();

                          if i = RichEdit1.Lines.Count -1 then
                            begin
                              Form1.Enabled := true;
                              Label2.Visible := false;
                              exit;
                            end else
               Replase_All_Log;
               exit;
              end;
end;


 
Новичечек   (2006-01-15 19:11) [1]

Извините, в одну не влезало...


procedure Tform1.SetColor;
var
k, k2, Fu, Tu, i : integer;
p : Tpoint;
s : string;
begin
Application.ProcessMessages();

i := strtoint(form1.Caption);
k2 :=0;

  s := RichEdit1.Lines.Strings[i];
  Fu := Pos(YoureNik.Text, s);
  Tu := Pos(OtherNik.Text, s);
  Application.ProcessMessages();

  if Fu<>0 then
   begin
     k := Fu;

     p.Y := i;
     p.X := 0;
     richEdit1.CaretPos := p;
     Application.ProcessMessages();
     

     For k := i+1 to RichEdit1.Lines.Count-1 do
         begin
          k2 := k2 + length(RichEdit1.Lines.Strings[k]);

           if (Pos(YoureNik.Text, RichEdit1.Lines.Strings[k]) <>0) or
              (Pos(OtherNik.Text, RichEdit1.Lines.Strings[k]) <>0) then
              begin
                k2 := k2 + length(RichEdit1.Lines.Strings[k]);
                break;
              end;

         end;

     RichEdit1.SelLength := k2;
     RichEdit1.SelAttributes.Color := clRed;
     RichEdit1.SelAttributes.Style := [fsbold];
     Application.ProcessMessages();

     i:= i+1;
     form1.Caption := inttostr(i);
     Application.ProcessMessages();
     

     If i = RichEdit1.Lines.Count -1 then
     begin
       Form1.Enabled := true;
       Label2.Visible := false;
       exit;
     end else
     SetColor;
     exit;
   end

else

  if Tu<>0 then
   begin
     k := Tu;
     p.Y := i;
     p.X := 0;
     richEdit1.CaretPos := p;
     Application.ProcessMessages();

     For k := i+1 to RichEdit1.Lines.Count-1 do
         begin
          k2 := k2 + length(RichEdit1.Lines.Strings[k]);

           if (Pos(YoureNik.Text, RichEdit1.Lines.Strings[k]) <>0) or
              (Pos(OtherNik.Text, RichEdit1.Lines.Strings[k]) <>0) then
              begin
                k2 := k2 + length(RichEdit1.Lines.Strings[k]);
                break;
              end;
         end;

     RichEdit1.SelLength := k2;
     RichEdit1.SelAttributes.Color := clBlue;
     RichEdit1.SelAttributes.Style := [fsbold];
     Application.ProcessMessages();

     i:= i+1;
     form1.Caption := inttostr(i);
     Application.ProcessMessages();
     

     If i = RichEdit1.Lines.Count -1 then
     begin
       Form1.Enabled := true;
       Label2.Visible := false;
       exit;
     end else
     SetColor;
     exit;
   end

else
              begin
               i:= i+1;
               form1.Caption := inttostr(i);
               Application.ProcessMessages();
               

               If i = RichEdit1.Lines.Count -1 then
                            begin
                              Form1.Enabled := true;
                              Label2.Visible := false;
                              exit;
                            end else
               SetColor;
               exit;
              end;
end;

procedure Tform1.Replase_Date_Time;
var
k,i : integer;
p : Tpoint;
s : string;
c : char;
begin
Application.ProcessMessages();

i := strtoint(form1.Caption);

  s := RichEdit1.Lines.Strings[i];
  k := Pos(ToU, s);

  if k<>0 then
              begin
                 p.Y := i;
                 p.X := k-1;
                 richEdit1.CaretPos := p;
                 RichEdit1.SelLength := length(ToU);
                 RichEdit1.ClearSelection;
                 Application.ProcessMessages();

                 p.X := length(RichEdit1.Lines.Strings[i])-3;
                 richEdit1.CaretPos := p;
                 RichEdit1.SelLength := (3);
                 RichEdit1.ClearSelection;
                 RichEdit1.Lines.Strings[i] := "["+RichEdit1.Lines.Strings[i]+"]";
                 Application.ProcessMessages();

                 RichEdit1.Lines.Strings[i] := RichEdit1.Lines.Strings[i]+"  "+RichEdit1.Lines.Strings[i+1];
                 RichEdit1.Lines.Delete(i+1);
                 Application.ProcessMessages();

                 s := RichEdit1.Lines.Strings[i];
                 c := char(#13);
                 Insert(c,s,0);
                 RichEdit1.Lines.Strings[i] := s;
                 Application.ProcessMessages();
                 
                    i:= i+1;
                    form1.Caption := inttostr(i);
                    Application.ProcessMessages();
                     

                         If i = RichEdit1.Lines.Count -1 then
                            begin
                              Form1.Enabled := true;
                              Label2.Visible := false;
                              exit;
                            end else
                    Replase_Date_Time;
                    exit;
              end
                else
              begin
               i:= i+1;
               Application.ProcessMessages();
               form1.Caption := inttostr(i);
               
                     If i = RichEdit1.Lines.Count -1 then
                            begin
                              Form1.Enabled := true;
                              Label2.Visible := false;
                              exit;
                            end else
               Replase_Date_Time;
               exit;
              end;
end;


 
Desdechado ©   (2006-01-15 19:58) [2]

вообще-то для замены в строке есть хорошая функция StringReplace



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.057 c
2-1136802938
BiggieSmalls
2006-01-09 13:35
2006.01.29
Свернуть окно


4-1132334112
manulo
2005-11-18 20:15
2006.01.29
Параметры окна по хендлу


2-1137345327
Tort
2006-01-15 20:15
2006.01.29
Копировать файлы


1-1135110284
Rem
2005-12-20 23:24
2006.01.29
Expand имя файла из формата 8.3 в полное имя


15-1135813719
Германн
2005-12-29 02:48
2006.01.29
Где взять МС-ДОС?