Главная страница
    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.45 MB
Время: 0.041 c
11-1109452786
Ripper
2005-02-27 00:19
2005.10.23
REG MULTI STRING


1-1127933261
френк
2005-09-28 22:47
2005.10.23
Загрузка CPU определенным приложением


4-1124372254
DID
2005-08-18 17:37
2005.10.23
Список устройств


14-1128364792
Darkwing
2005-10-03 22:39
2005.10.23
Книга про базы данных в Delphi


8-1117544871
LameFox
2005-05-31 17:07
2005.10.23
Работа с большими картинками





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский