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 ontleed 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 de Delimiter en DelimitedText eigenschappen van de TStrings-klasse, maar helaas zit er een fout in de implementatie ("in" Delphi) waarbij het spatie-teken altijd wordt gebruikt als scheidingsteken.
De enige oplossing voor het ontleden van een gescheiden string is het schrijven van een eigen methode:
~~~~~~~~~~~~~~~~~~~~~~~~~
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', ';')