Na ja, dein Problem ist es, dass du in deiner Schleife schon über alle Strings der StringListe gehst und hier jeden String schon zerlegst. Ein StringTokenizer wird eigentlich nur auf ein String angewendet. Mal etwas abstrakt:
Delphi-Quellcode:
var StringTokenizer : TStringTokenizer;
List : TStrings;
i : Integer;
buffer : String;
begin
// Erzeugen eines TStringtokenizer zu geg. Trennzeichen
StringTokenizer := TStringTokenizer.Create(Trennzeichen);
// Prüfen ob die Stringlist leer ist
if List.Count > 0 then
begin
// alle Strings der StringList durchgehen
for i := 0 to List.Count - 1 do
begin
// einen String auswählen
StringTokenizer.zuZerlegenderString := List.Strings[i];
// String in alle seine Token zerlegen
while StringTokenizer.hasMoreToken do
begin
buffer := StringTokenizer.getNextToken;
// mache was mit diesem Token
end;
end;
end;
end;
So kämst du an jedes Token (nacheinander).
Natürlich fehlt die komplette Implementierung deines TStringTokenizer. Eine sehr einfache Methode ist es aber wie gesagt, den String einfach mittels Pos auf weitere Vorkommen zu prüfen und ggf. zu Trennen.
Anders gesagt
Delphi-Quellcode:
function TStringTokenizer.hasMoreToken : Boolean;
begin
result := length(self.zuZerlegenderString) > 0;
end;
function TStringTokenizer.getNextToken : String;
var buffer : Integer;
begin
result := '';
if length(self.zuZerlegenderString) > 0 then
begin
buffer := Pos(self.Trennzeichen, self.zuZerlegenderString);
if buffer > 0 then
begin
result := LeftStr(self.zuZerlegenderString, (buffer - 1));
self.zuZerlegenderString := RightStr(self.zuZerlegenderString, length(self.zuZerlegenderString) - (buffer + 1));
end
else
begin
result := self.zuZerlegenderString;
self.zuZerlegenderString := '';
end;
end;
end;
So als ungetesteter Ansatz