Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
Новичечек   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.053 c
3-1133266091
Sanktum
2005-11-29 15:08
2006.01.29
Not a valid bookmark. (Error 3159)


15-1136832939
Knight
2006-01-09 21:55
2006.01.29
Что и как можно узнать о компьютере?


9-1124145529
keal
2005-08-16 02:38
2006.01.29
Отсечение невидимых граней в OpenGL


15-1136384875
AO
2006-01-04 17:27
2006.01.29
Сила воли и Терпение


1-1135272387
GEN++
2005-12-22 20:26
2006.01.29
Точка останова в DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский