Ci sono molte volte in cui è necessario dividere una stringa in una matrice di stringhe usando un carattere come separatore. Ad esempio, un file CSV (separato da "virgola") potrebbe avere una riga come "Zarko; Gajic ;; DelphiGuide" e desideri che questa riga venga analizzata in 4 righe (stringhe) "Zarko", "Gajic", "" ( stringa vuota) e "DelphiGuide" usando il carattere punto e virgola ";" come delimitatore.
Delphi fornisce diversi metodi per analizzare una stringa, ma potresti scoprire che nessuno dei due fa esattamente ciò di cui hai bisogno. Ad esempio, il metodo RTL di ExtractStrings utilizza sempre i caratteri di virgolette (singoli o doppi) per i delimitatori. Un altro approccio è quello di utilizzare il delimitatore e DelimitedText proprietà della classe TStrings, ma sfortunatamente, c'è un bug nell'implementazione ("dentro" Delphi) in cui il carattere spaziale viene sempre usato come delimitatore.
L'unica soluzione per analizzare una stringa delimitata è scrivere un metodo tutto tuo:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedura ParseDelimited (const sl: TStrings; valore const: stringa; delimitatore const: stringa);
var
dx: intero;
ns: stringa;
txt: stringa;
delta: intero;
inizio
delta: = Lunghezza (delimitatore);
txt: = valore + delimitatore;
sl.BeginUpdate;
sl.Clear;
provare
mentre Lunghezza (txt)> 0 fa
inizio
dx: = Pos (delimitatore, txt);
ns: = Copia (txt, 0, dx-1);
sl.Add (ns);
txt: = Copia (txt, dx + delta, MaxInt);
fine;
infine
sl.EndUpdate;
fine;
fine;
~~~~~~~~~~~~~~~~~~~~~~~~~
Utilizzo (riempie Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')