Patarimai

Kaip išanalizuoti atskirtą eilutę į stygų sąrašą

Kaip išanalizuoti atskirtą eilutę į stygų sąrašą


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
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“, „;“)



Komentarai:

  1. Karn

    Manau, kad tu neteisi. Galiu apginti poziciją. Rašyk man į PM, susisieksime.

  2. Kenley

    Jūs pataikėte į ženklą. Thought good, I support.

  3. JoJomi

    Pakalbėkime.

  4. Galton

    Sutinku, gana naudinga idėja

  5. Joshka

    Mano nuomone, tai yra aktualu, dalyvausiu diskusijoje. Aš žinau, kad kartu galime atvykti į teisingą atsakymą.

  6. Mikio

    Tai tiesiog puiki idėja



Parašykite pranešimą