Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 02.10.11 17:43 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 02.10.11 18:25 
Du machst es dir aber reichlich schwer. ;-) Eine unoptimierte Variante mit variablen Stücklängen:
ausblenden 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;

Für diesen Beitrag haben gedankt: LittleBen
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 02.10.11 18:33 
Vieeelen Dank :) Das habe ich gesucht!
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mo 03.10.11 11:14 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
[...]
ausblenden Delphi-Quelltext
1:
2:
function FillStringList(const AText: string; ASliceSize: Integer; ATarget: TStrings): Integer;
[...]

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