Главная страница
    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.037 c
14-1127804254
Empleado
2005-09-27 10:57
2005.10.23
Небольшие заметки. Бельгия.


8-1117163884
race1
2005-05-27 07:18
2005.10.23
векторные либы


4-1124470748
NikNet
2005-08-19 20:59
2005.10.23
Как сделать Explorer для Реестра


14-1126765043
by
2005-09-15 10:17
2005.10.23
DOA vs. ODAC. Програмирующие Oracle + Delphi (Builder) ваш выбор?


3-1126175918
ХиМ
2005-09-08 14:38
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский