Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - String in 100er Abschnitte zerlegen


LittleBen - So 02.10.11 17:43
Titel: String in 100er Abschnitte zerlegen
Hallo,
ich stehe mal wieder vor einem Problem: Ein String soll nach allen 100 Zeichen "abgeschnitten" werden und in eine Stringlist kopiert werden. Dafür habe ich mir zwar schon was ausgedacht, doch es entstehen immer wieder leere Zeilen oder Lücken:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
var cText: string;
    sl: TStringlist;
    nPos: integer;
begin
  sl:= TStringList.Create;
  cText:= ShowIEAutoCompletePWs;

  nPos:= 0;
  while nPos <= Length(cText) do
  begin

   // Fast am Ende
   if (nPos + 100) > Length(cText) then
   begin
    sl.Add(Copy(cText, nPos+1, Length(cText)-(nPos)));

    inc(nPos,100);
    continue;
   end;

   sl.Add(Copy(cText, nPos+1100));

   inc(nPos, 100);
  end;

  showmessage(sl.Text);
  sl.Free;
end;
Wenn ich die Abschnitte immer einem String dazu addiere, dann funktioniert alles wunderbar (cSection:= cSection + Copy(cText, nPos+1, Length(cText)-(nPos))));

Woran kann das liegen? Gibt es vielleicht eine besser Methode?

Viele Grüße,
Benny


jaenicke - So 02.10.11 18:25

Du machst es dir aber reichlich schwer. ;-) Eine unoptimierte Variante mit variablen Stücklängen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function FillStringList(const AText: string; ASliceSize: Integer; ATarget: TStrings): Integer;
var
  i: Integer;
begin
  for i := 0 to Pred(Math.Ceil(Length(AText) / ASliceSize)) do
    ATarget.Add(Copy(AText, Succ(i * ASliceSize), ASliceSize));
end;

procedure TForm136.FormCreate(Sender: TObject);
var
  Test: TStringList;
begin
  Test := TStringList.Create;
  try
    FillStringList('Test12345Test12345Test12345Test12345Test12345Test'9, Test);
    ShowMessage(Test.Text);
  finally
    Test.Free;
  end;
end;


LittleBen - So 02.10.11 18:33

Vieeelen Dank :) Das habe ich gesucht!


Robert.Wachtel - Mo 03.10.11 11:14

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
[...]

Delphi-Quelltext
1:
2:
function FillStringList(const AText: string; ASliceSize: Integer; ATarget: TStrings): Integer;
[...]

Der Rückgabewert der Funktion könnte undefiniert sein... :mrgreen:...