Υπάρχουν πολλές φορές όταν πρέπει να χωρίσετε ένα σειρά σε ένα πίνακας των συμβολοσειρών χρησιμοποιώντας ένα χαρακτήρα ως διαχωριστικό. Για παράδειγμα, ένα αρχείο CSV (διαχωρισμένο με "κόμμα") μπορεί να έχει μια γραμμή όπως "Zarko; Gajic;; DelphiGuide "και θέλετε αυτή η γραμμή να αναλυθεί σε 4 γραμμές (" χορδές ")" Zarko "," Gajic "," "(κενή συμβολοσειρά) και" DelphiGuide "χρησιμοποιώντας τον χαρακτήρα semi-colon"?
Ο Δελφός παρέχει αρκετές μεθόδους για την ανάλυση μιας συμβολοσειράς, αλλά μπορεί να διαπιστώσετε ότι κανείς δεν κάνει ακριβώς αυτό που χρειάζεστε. Για παράδειγμα, η μέθοδος ExtractStrings RTL χρησιμοποιεί πάντα χαρακτήρες προσφοράς (μονή ή διπλή) για τους οριοθέτες. Μια άλλη προσέγγιση είναι να χρησιμοποιήσετε τοΔιαχωριστής καιDelimitedText ιδιότητες της κλάσης TStrings - αλλά δυστυχώς, υπάρχει ένα σφάλμα στην υλοποίηση ("μέσα" στους Δελφούς) όπου ο χαρακτήρας διαστήματος χρησιμοποιείται πάντα ως οριοθέτης.
~~~~~~~~~~~~~~~~~~~~~~~~~
διαδικασία ParseDelimited (const sl: TStrings; τιμή const: string; const delimiter: συμβολοσειρά).
var
dx: ακέραιο;
ns: string;
txt: string;
delta: ακέραιο;
ξεκινήσει
delta: = Μήκος (οριοθέτης).
txt: = αξία + οριοθέτης;
sl. BeginUpdate;
sl. Σαφή;
δοκιμάστε
ενώ το μήκος (txt)> 0 κάνει
ξεκινήσει
dx: = Pos (οριοθέτης, txt);
ns: = Αντιγραφή (txt, 0, dx-1).
sl. Προσθέστε (ns);
txt: = Αντιγραφή (txt, dx + δέλτα, MaxInt);
τέλος;
τελικά
sl. EndUpdate;
τέλος;
τέλος;
~~~~~~~~~~~~~~~~~~~~~~~~~
Χρήση (συμπληρώνει Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide ','; ')