DataCool war so freundlich meine Funktion noch ein bischen zu verbessern - THANKS
Delphi-Quellcode:
procedure splitString(const Source: String; const Delimiter: String; var Dest: TStringlist);
var count: Integer;
LStartpos, LEndepos, LSourcelength: Integer;
LDelimiterLength : Integer;
begin
Dest.Clear;
count := 1;
LStartpos := 0;
LEndepos := 0;
LSourcelength := length(Source);
LDelimiterLength := Length(Delimiter);
while count <= LSourcelength do begin
if copy(Source, count, LDelimiterLength) = Delimiter then begin
LEndepos := count;
dest.Add(copy(Source, LStartpos + 1, LEndepos - LStartpos - 1));
LStartpos := count + LDelimiterLength - 1;
inc(count,LDelimiterLength);
end
else begin
inc(count);
end;
end;
if LEndePos <> Count - LDelimiterLength then
dest.Add(copy(Source, LStartpos + 1, count - LStartpos - 1));
end;
@Lamy: eigentlich brauchst du die funktion nicht da dein Problem einzeilig ist und somit stringreplace die einfacherere alternative ist.
Zu deinen Fragen:
Delphi-Quellcode:
Dest.Clear; //leert die Ziel-Stringliste (dem user bissl arbeit abnehmen)
count := 1; //Count ist der Index wo wir uns gerade im String befinden
LStartpos := 0; //anfangs wird die startposition auf 0 gesetzt damit, irgendwo muss ja der string anfangen
LEndepos := 0; //Da wir noch nicht parsen muss die endeposition auch auf 0 - wird später hochgezählt
LSourcelength := length(Source); //wird für schleifenabbruch bedingung gebraucht. gibt an wie lang der string ist der zerteilt werden soll
Beispielaufruf:
Delphi-Quellcode:
var LListe: TStringlist;
begin
LListe := TStringlist.create;
splitString('Part1|Part2|Part3', '|'; LListe);
//jetzt sollte in LListe der geteilte sting sein - also 3 Items
[...] //dein source (also das auswerten der items)
LListe.Free;
end;
[Edit]Fehler in Funktion beseitigt[/Edit]