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

Вниз

Почему то возникает ошибка - 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
14-1128010256
Cerberus
2005-09-29 20:10
2005.10.23
Колеблюсь с выбором инстетута.


3-1126171906
Makcim
2005-09-08 13:31
2005.10.23
активность записb


2-1127583139
quadronik
2005-09-24 21:32
2005.10.23
Числовое вырожение прописью


11-1109533474
Гость
2005-02-27 22:44
2005.10.23
TKOLToolBar: проблема с кнопками


10-1105532746
grigory
2005-01-12 15:25
2005.10.23
Как произвести экспорт в аутлуке?