Hallo,
es kommen nicht *zwei Arrays*, sondern zwei Einträge in einer TStringList. Einer gleicht 'blabla' und einer ist ein Leerstring.
Mach einen Breakpoint auf
Strings.DelimitedText := Input;
und steppe mal mit F7 durch. Dann wird Dir klar, was passiert. Kurz gesagt: #0 geht halt nicht.
Antwort1) der Delimiter darf bei dieser Vorgehensweise nicht #0 sein.
Antwort2) eine TStringList für diesen Zweck zu verwenden ist super praktisch und super Performance fressend.
Mir hat eine Funktion auf Stackoverflow ganz gut gefallen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
MYDELIMITER = #0;
var
s : string;
sTok: string;
i : integer;
function GetTok(const Line: string; const Delim: Char; const TokenNum: Byte): string;
{ LK Nov 8, 2009 - Reoptimized using PChars instead of calls to Pos and PosEx }
{ See; http://stackoverflow.com/questions/1694001/is-there-a-fast-gettoken-routine-for-delphi }
var
I, CurToken: Integer;
PLine, PStart: PChar;
begin
CurToken := 1;
PLine := PChar(Line);
PStart := PLine;
for I := 1 to length(Line) do begin
if PLine^ = Delim then begin
if CurToken = TokenNum then
break
else begin
CurToken := CurToken + 1;
inc(PLine);
PStart := PLine;
end;
end
else
inc(PLine);
end;
if CurToken = TokenNum then
SetString(Result, PStart, PLine - PStart)
else
Result := '';
end;
begin
s := 'blabla' + MYDELIMITER + 'blabla2' + MYDELIMITER + 'blabla3' + MYDELIMITER + 'blabla4' + MYDELIMITER + 'blabla5' + MYDELIMITER ;
i := 1;
sTok := GetTok(s, MYDELIMITER, i);
while ('' <> sTok) do
begin
ShowMessage(sTok);
inc(i);
sTok := GetTok(s, MYDELIMITER, i);
end;
end;
HTH