Adviezen

Hoe een afgebakende string in een stringlijst te parseren

Hoe een afgebakende string in een stringlijst te parseren

Er zijn vaak momenten waarop je een string moet splitsen in een reeks strings door een karakter als scheidingsteken te gebruiken. Een CSV-bestand ("komma" gescheiden) kan bijvoorbeeld een regel hebben als "Zarko; Gajic ;; DelphiGuide" en u wilt dat deze regel wordt geparseerd in 4 regels (tekenreeksen) "Zarko", "Gajic", "" ( lege tekenreeks) en "DelphiGuide" met het puntkomma ";" als een scheidingsteken.

Delphi biedt verschillende methoden om een ​​string te parseren, maar het kan zijn dat geen van beide precies doet wat u nodig hebt. De RTL-methode ExtractStrings gebruikt bijvoorbeeld altijd aanhalingstekens (enkel of dubbel) voor scheidingstekens. Een andere benadering is om deDelimiter enDelimitedText eigenschappen van de TStrings-klasse, maar helaas zit er een fout in de implementatie ("in" Delphi) waarbij het spatie-teken altijd als scheidingsteken wordt gebruikt.

De enige oplossing voor het ontleden van een gescheiden string is het schrijven van een eigen methode:

Voorbeeld van gescheiden tekenreeks

~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ParseDelimited (const sl: TStrings; const waarde: string; const scheidingsteken: string);
var
dx: geheel getal;
ns: string;
txt: string;
delta: geheel getal;
beginnen
delta: = lengte (scheidingsteken);
txt: = waarde + scheidingsteken;
sl.BeginUpdate;
sl.Clear;
proberen
terwijl Lengte (txt)> 0 doen
beginnen
dx: = Pos (scheidingsteken, txt);
ns: = Kopiëren (txt, 0, dx-1);
sl.Add (ns);
txt: = Copy (txt, dx + delta, MaxInt);
einde;
Tenslotte
sl.EndUpdate;
einde;
einde;
~~~~~~~~~~~~~~~~~~~~~~~~~

Gebruik (vult Memo1 in):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')


Bekijk de video: 3 ways businesses can fight sex trafficking. Nikki Clifton (December 2020).