Analizați o șiruri delimitate într-o listă de șiruri (Delphi)

Există de multe ori când trebuie să împărțiți o şir într-un mulțime a șirurilor folosind un caracter ca separator. De exemplu, un fișier CSV („virgulă” separat) poate avea o linie precum „Zarko; Gajic;; DelphiGuide "și doriți ca această linie să fie analizată în 4 linii (șiruri)" Zarko "," Gajic "," "(șir gol) și" DelphiGuide "folosind caracterul semicolon"; "ca delimitator.

Delphi oferă mai multe metode pentru a analiza un șir, dar s-ar putea să descoperiți că niciuna nu face exact ceea ce aveți nevoie. De exemplu, metoda ExtractStrings RTL folosește întotdeauna caractere de cotație (unice sau duble) pentru delimitatori. O altă abordare este utilizareadelimitator șiDelimitedText proprietățile clasei TStrings - dar, din păcate, există o eroare în implementare („în interior” Delphi) unde caracterul spațial este întotdeauna folosit ca delimitator.

~~~~~~~~~~~~~~~~~~~~~~~~~
procedura ParseDelimited (const sl: TStrings; valoare const: șir; const delimiter: șir);
var
dx: număr întreg;
ns: șir;
txt: șir;

instagram viewer

delta: număr întreg;
începe
delta: = Lungime (delimiter);
txt: = valoare + delimitator;
sl. BeginUpdate;
sl. Clar;
încerca
în timp ce Length (txt)> 0 do
începe
dx: = Pos (delimiter, txt);
ns: = Copiere (txt, 0, dx-1);
sl. Adăugați (ns);
txt: = Copiere (txt, dx + delta, MaxInt);
Sfârșit;
in cele din urma
sl. EndUpdate;
Sfârșit;
Sfârșit;
~~~~~~~~~~~~~~~~~~~~~~~~~

Utilizare (completează Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide“, '')

instagram story viewer