
We are searching data for your request:
Upon completion, a link will appear to access the found materials.
Yra daug kartų, kai reikia suskaidyti eilutę į eilių masyvą, naudodami simbolį kaip skiriamąjį elementą. 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 atskyrėjas.
„Delphi“ siūlo keletą būdų eilutei parsiduoti, tačiau galite pastebėti, kad nė vienas jų nedarys to, 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), kur tarpo ženklas visada naudojamas kaip atskyriklis.
Vienintelis sprendimas atskirti atribotas eilutes yra parašyti savo metodą:
Atskirtas stygos pavyzdys
~~~~~~~~~~~~~~~~~~~~~~~~~
procedūra „ParseDelimited“ (const sl: TStrings; const reikšmė: eilutė; const skiriamoji geba: 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.Išvalyti;
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);
pabaiga;
pagaliau
sl.EndUpdate;
pabaiga;
pabaiga;
~~~~~~~~~~~~~~~~~~~~~~~~~
Naudojimas (užpildo „Memo1“):
„ParseDelimited“ („Memo1.lines“, „Zarko; Gajic ;; DelphiGuide“, „;“)
Manau, kad tu neteisi. Galiu apginti poziciją. Rašyk man į PM, susisieksime.
Jūs pataikėte į ženklą. Thought good, I support.
Pakalbėkime.
Sutinku, gana naudinga idėja
Mano nuomone, tai yra aktualu, dalyvausiu diskusijoje. Aš žinau, kad kartu galime atvykti į teisingą atsakymą.
Tai tiesiog puiki idėja