Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизПочему то возникает ошибка - Stek Overlow Найти похожие ветки
← →
555 (2005-09-30 12:01) [0]Обрезаю строки по длине.
Делаю так:
procedure Format(Textlist: TRichedit; l,i: integer);
const
sc: Pchar = char(#13)+char(#10);
var
sp : integer;
s : String;
c : Char;
begin
if i = Textlist.Lines.count-1 then exit;
s := "";
form1.Caption := IntToStr(i);
if length(Textlist.Lines.Strings[i]) > l then
begin
s := Textlist.Lines.Strings[i];
for sp := l downto 1 do
begin
c := s[sp];
Application.ProcessMessages();
if c = " " then
begin
Insert(sc,s,sp);
Application.ProcessMessages();
Textlist.Lines.Strings[i] := s;
break;
end;
end;
Format(Textlist, l, i);
end else Format(Textlist, l, i+1);
end;
В чем ошибка?
Помогите плийз сделать как надо....
Оооочень нужно отфарматировать текст (более 5 тысяч строк и все разной длины) - выставив им максимальную длину строки не более 120 символов.
ПАМАГИТЕ пожалуйста.
← →
TUser © (2005-09-30 12:04) [1]Потому что у тебя бесконечная рекурсия.
← →
555 (2005-09-30 12:10) [2]
> TUser © (30.09.05 12:04) [1]
>
> Потому что у тебя бесконечная рекурсия.
>
А как надо?
← →
TUser © (2005-09-30 12:28) [3]Не тестировал
const
MaxLen = 120;
type
TMaxString =
record
Value: string[MaxLen];
Len: byte;
end;
procedure Init (var S: TMaxString);
var b: byte;
begin
for b:=1 to MaxLen do
S.Value[b]:=" ";
S.Len:=0;
end;
procedure Push (S; TMaxString; C: char);
begin
with S do begin
inc (Len);
if Len > MaxLen then
raise Exception.Create ("Overflow");
Value[Len]:=C;
end;
end;
procedure Copy (var D, S: TMaxString; Dest: TStrings);
var b: byte;
begin
if S.Len = 0 then Exit;
if D.Len + 1 + S.Len > MaxLen then begin
Dest.Add (copy(D.Value,1,D.Len));
Init (D);
end else Push (D," ");
for b:=1 to S.Len do
Push (D,S.Value[b]);
Init (S);
end;
procedure Make120Lines (Dest, Source: TStrings);
var S, W: tmaxstring;
i: integer;
c: char;
begin
Init (S); Init(W);
Dest.BeginUpdate;
try
for i:=1 to length(Source.Text) do begin
c:=Source.Text[i];
if not (c in [ #10, #13]) then
if c = " " then begin
Copy (S,W,Dest);
end else Push (W,c)
end;
Dest.Add(copy(S.Value,1,S.Len));
finally
Dest.EndUpdate;
end;
end;
← →
TUser © (2005-09-30 14:45) [4]
> procedure Push (S; TMaxString; C: char);
procedure Push (var S; TMaxString; C: char);
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c