Analizirati razgraničeni niz na nizu žica (Delphi)

Ima mnogo puta kad trebate podijeliti niz u an red nizova koristeći znak kao separator. Na primjer, CSV datoteka (odvojena zarezom) može imati liniju kao "Žarko; Gajić;; DelphiGuide "i želite da se ovaj redak raščlani u 4 retka (žice)" Žarko "," Gajić "," (prazan niz) i "DelphiGuide" koristeći znak dvotočke i dvotočka ";" kao razdjelnik.

Delphi nudi nekoliko metoda za raščlanjivanje niza, ali možda otkrijete da niti jedan ne radi točno ono što trebate. Na primjer, RTL metoda ExtractStrings uvijek koristi znakove citata (pojedinačni ili dvostruki) za razgraničitelje. Drugi pristup je upotrebagraničnik iDelimitedText svojstva klase TStrings - ali nažalost, postoji greška u implementaciji ("unutar" Delphija) gdje se prostorni znak uvijek koristi kao razgraničitelj.

~~~~~~~~~~~~~~~~~~~~~~~~~
postupak ParseDelimited (const sl: TStrings; vrijednost const: string; razdjelnik const: string);
var
dx: cijeli broj;
ns: string;
txt: string;
delta: cijeli broj;
početi
delta: = duljina (razdjelnik);
txt: = vrijednost + graničnik;

instagram viewer

sl. BeginUpdate;
sl. Čisto;
probati
dok je dužina (txt)> 0
početi
dx: = Pos (razdjelnik, txt);
ns: = Kopiraj (txt, 0, dx-1);
sl. Dodaj (ns);
txt: = Kopiraj (txt, dx + delta, MaxInt);
kraj;
konačno
sl. EndUpdate;
kraj;
kraj;
~~~~~~~~~~~~~~~~~~~~~~~~~

Upotreba (ispunjava Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajić;; DelphiGuide”, '')

instagram story viewer