Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.051 c
14-1128235140
Мазут Береговой
2005-10-02 10:39
2005.10.23
Старый добрый "Крокодил"


5-1103408543
klyonov
2004-12-19 01:22
2005.10.23
Пакеты


3-1126093049
Пантелеев Иван
2005-09-07 15:37
2005.10.23
Поиск + Подставление зап.


14-1126859152
dr Tr0jan
2005-09-16 12:25
2005.10.23
Конвертер файлов Altera


2-1127975965
newer
2005-09-29 10:39
2005.10.23
Delphi





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