Hinweise

Analysieren einer begrenzten Zeichenfolge in eine Zeichenfolgenliste

Analysieren einer begrenzten Zeichenfolge in eine Zeichenfolgenliste



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

In vielen Fällen müssen Sie eine Zeichenfolge in ein Array von Zeichenfolgen aufteilen, 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 desTrennzeichen undDelimitedText 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:

Beispiel für eine durch Trennzeichen getrennte Zeichenfolge

~~~~~~~~~~~~~~~~~~~~~~~~~
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;
endlich
sl.EndUpdate;
Ende;
Ende;
~~~~~~~~~~~~~~~~~~~~~~~~~

Verwendung (füllt Memo1 aus):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')