Yra daug kartų, kai reikia padalyti a stygos į masyvas stygų naudojant simbolį kaip atskyrėją. Pvz., CSV („kableliais atskirtas“) failas gali turėti tokią eilutę kaip „Zarko; Gajic;; „DelphiGuide“ ir norite, kad ši eilutė būtų suskaidyta į 4 eilutes (eilutes) „Zarko“, „Gajic“, „“ (tuščia eilutė) ir „DelphiGuide“, naudojant kabliataškio ženklą „;“ kaip atskyriklį.
„Delphi“ siūlo kelis būdus, kaip eilutę parsiduoti, tačiau galite pastebėti, kad nė vienas jų daro ne tai, ko jums reikia. Pavyzdžiui, „ExtractStrings RTL“ metodas visada skiria kabutes (viengubas arba dvigubas) atskyrėjams. Kitas būdas yra naudotiAtskyrėjas irDelimitedText TStrings klasės savybės, bet, deja, diegime yra klaida („Delphi“ viduje), kai tarpo ženklas visada naudojamas kaip atskyriklis.
~~~~~~~~~~~~~~~~~~~~~~~~~
procedūra ParseDelimited (const sl: TStrings; const reikšmė: eilutė; const delimiter: eilutė);
var
dx: sveikasis skaičius;
ns: styga;
txt: eilutė;
delta: sveikasis skaičius;
prasideda
delta: = ilgis (skiriamasis);
txt: = reikšmė + atskyriklis;
sl. „BeginUpdate“;
sl. Skaidrus;
bandyti
o ilgis (txt)> 0 daryti
prasideda
dx: = Pos (atskirtuvas, txt);
ns: = Kopijuoti (txt, 0, dx-1);
sl. Pridėti (ns);
txt: = Kopijuoti (txt, dx + delta, MaxInt);
galas;
pagaliau
sl. „EndUpdate“;
galas;
galas;
~~~~~~~~~~~~~~~~~~~~~~~~~
Naudojimas (užpildo „Memo1“):
„ParseDelimited“ („Memo1.lines“, „Zarko; Gajic;; „DelphiGuide“, „;“)