Es gibt viele Fälle, in denen Sie eine Zeichenfolge in ein Array von Zeichenfolgen aufteilen müssen, indem Sie ein Zeichen als Trennzeichen verwenden. Beispielsweise könnte eine CSV-Datei (durch Kommas getrennt) eine Zeile wie "Zarko; Gajic; DelphiGuide" enthalten, und Sie möchten, dass diese Zeile in 4 Zeilen (Zeichenfolgen) "Zarko", "Gajic", "" ( leere Zeichenfolge) und "DelphiGuide" mit dem Semikolon ";" als Begrenzer.
Delphi bietet mehrere Methoden zum Parsen eines Strings, aber Sie werden möglicherweise feststellen, dass keine genau das tut, was Sie benötigen. Beispielsweise verwendet die RTL-Methode ExtractStrings immer einfache oder doppelte Anführungszeichen als Begrenzer. Ein anderer Ansatz ist die Verwendung des Trennzeichen und DelimitedText Eigenschaften der TStrings-Klasse - aber leider gibt es einen Fehler in der Implementierung ("inside" Delphi), bei dem das Leerzeichen immer als Begrenzer verwendet wird.
Die einzige Lösung zum Parsen einer Zeichenfolge mit Trennzeichen besteht darin, eine eigene Methode zu schreiben:
~~~~~~~~~~~~~~~~~~~~~~~~~~
Prozedur ParseDelimited (const sl: TStrings; const-Wert: Zeichenfolge; const-Begrenzer: Zeichenfolge);
var
dx: ganze Zahl;
ns: string;
txt: string;
Delta: ganze Zahl;
Start
Delta: = Länge (Begrenzer);
txt: = value + delimiter;
sl.BeginUpdate;
sl.Clear;
Versuchen
while Länge (txt)> 0 do
Start
dx: = Pos (Begrenzer, txt);
ns: = Kopie (txt, 0, dx-1);
sl.Add (ns);
txt: = Kopieren (txt, dx + Delta, MaxInt);
Ende;
schließlich
sl.EndUpdate;
Ende;
Ende;
~~~~~~~~~~~~~~~~~~~~~~~~~~
Verwendung (füllt Memo1 aus):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')