![]() |
Ein dynamisches Array aus einem String erzeugen
Eine Zeichenkette soll in ein dynamisches String-Array aufgeteilt werden. Unter PHP gibt es dazu die Funktion explode(). Delphi bietet jedoch von Haus aus keine solche an.
Delphi-Quellcode:
Toxman fügte noch hinzu, dass TStringdynarray als type deklariert werden muss:
// Explode trennt S in die durch Separator getrennten Elemente auf. Wenn Limit
// > 0 ist, so werden max. Limit Elemente getrennt, wobei im letzen Element // die Restzeichenkette steht. function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray; var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen); Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); end; // Implode fügt alle Elemente von Pieses in einen String aneinander, wobei die // Elemente durch Glue getrennt werden. function Implode(const Glue: string; const Pieces: array of string): string; var i, Len: Integer; P: PChar; GlueLen: Integer; begin GlueLen := Length(Glue); Len := GlueLen * High(Pieces); for i := 0 to High(Pieces) do Inc(Len, Length(Pieces[i])); SetLength(Result, Len); if Len > 0 then begin P := @Result[1]; for i := 0 to High(Pieces) do begin if (GlueLen > 0) and (i > 0) then P := StrLCopy(P, Pointer(Glue), GlueLen) + GlueLen; Len := Length(Pieces[i]); if Len > 0 then P := StrLCopy(P, Pointer(Pieces[i]), Len) + Len; end; end; end;
Delphi-Quellcode:
Eine optimierte Version vom alzaimar gibt es in der
type TSTringdynarray = array of String;
![]() [edit=Matze]Link zur optimierten Version hinzugefügt. Mfg, Matze[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz