Jäsentää erotettu merkkijono merkkijonojen luetteloon (Delphi)

Monta kertaa sinun täytyy jakaa a jono osaksi ryhmä merkkijonoja erottimella. Esimerkiksi CSV-tiedostossa ("pilkku" erotettu) voi olla rivi kuten "Zarko; Gajic;; DelphiGuide "ja haluat tämän rivin jäsentävän neljään riviin (merkkijonoihin)" Zarko "," Gajic "," "(tyhjä merkkijono) ja" DelphiGuide "käyttämällä puolipiste-merkkiä"; "erottimena.

Delphi tarjoaa useita menetelmiä merkkijonon jäsentämiseksi, mutta saatat huomata, että kumpikaan ei tee tarkalleen mitä tarvitset. Esimerkiksi ExtractStrings RTL -menetelmä käyttää rajamerkkeihin aina lainausmerkkejä (yksi tai kaksinkertainen). Toinen tapa on käyttäädelimiter jaDelimitedText TStrings-luokan ominaisuudet - mutta valitettavasti toteutuksessa on vika ("Delphin sisällä"), jossa välilyöntiä käytetään aina erottimena.

~~~~~~~~~~~~~~~~~~~~~~~~~
menettely ParseDelimited (jatkuu: TStrings; const-arvo: merkkijono; const erotin: merkkijono);
var
dx: kokonaisluku;
ns: merkkijono;
txt: merkkijono;
delta: kokonaisluku;
alkaa
delta: = Pituus (erotin);
txt: = arvo + erotin;

instagram viewer

ps. BeginUpdate;
ps. Asia selvä;
yrittää
kun taas Pituus (txt)> 0 tehdä
alkaa
dx: = Pos (erotin, txt);
ns: = Kopio (txt, 0, dx-1);
ps. Lisää (ns);
txt: = Kopioi (txt, dx + delta, MaxInt);
end;
vihdoin
ps. EndUpdate;
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~

Käyttö (täyttää Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide', '')