Форум: "Начинающим";
Текущий архив: 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