Ci sono molte volte in cui è necessario dividere a corda in un Vettore di stringhe utilizzando un carattere come separatore. Ad esempio, un file CSV (separato da "virgola") potrebbe avere una linea come "Zarko; Gajic;; DelphiGuide "e vuoi che questa riga venga analizzata in 4 righe (stringhe)" Zarko "," Gajic "," "(stringa vuota) e" DelphiGuide "usando il carattere punto e virgola"; "come delimitatore.
Delphi offre 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 è usare ildelimitatore eDelimitedText proprietà della classe TStrings - ma sfortunatamente, c'è un bug nell'implementazione ("dentro" Delphi) in cui il carattere spaziale viene sempre usato come delimitatore.
~~~~~~~~~~~~~~~~~~~~~~~~~
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. Chiaro;
provare
mentre Lunghezza (txt)> 0 fa
inizio
dx: = Pos (delimitatore, txt);
ns: = Copia (txt, 0, dx-1);
sl. Aggiungi (ns);
txt: = Copia (txt, dx + delta, MaxInt);
fine;
infine
sl. EndUpdate;
fine;
fine;
~~~~~~~~~~~~~~~~~~~~~~~~~
Utilizzo (riempie Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide', ';')