Pārdalīt iedalīto virkni stīgu sarakstā (Delphi)

Ir daudzas reizes, kad jums ir nepieciešams sadalīt a virkne uz masīvs virknes, izmantojot rakstzīmi kā atdalītāju. Piemēram, CSV (“komats atdalīts”) failam var būt tāda līnija kā “Zarko; Gajičs;; DelphiGuide "un jūs vēlaties, lai šī rinda tiktu parsēta 4 rindās (virknes)" Zarko "," Gajic "," "(tukša virkne) un" DelphiGuide ", izmantojot semikolu ar rakstzīmi"; "kā norobežotāju.

Delfi piedāvā vairākas virknes parsēšanas metodes, taču jūs varētu secināt, ka neviena no tām neveic tieši to, kas jums nepieciešams. Piemēram, ExtractStrings RTL metodē norobežotājiem vienmēr tiek izmantotas pēdiņas (vienreizējas vai dubultas). Vēl viena pieeja ir izmantotAtdalītājs unDelimitedText TStrings klases īpašības, taču diemžēl ieviešanā ir kļūda (Delphi "iekšpusē"), kur atstarpi vienmēr izmanto kā norobežotāju.

~~~~~~~~~~~~~~~~~~~~~~~~~
procedūra ParseDelimited (const sl: TStrings; const vērtība: virkne; const atdalītājs: virkne);
var
dx: vesels skaitlis;
ns: virkne;
txt: virkne;
delta: vesels skaitlis;
sākt
delta: = garums (atdalītājs);

instagram viewer

txt: = vērtība + atdalītājs;
sl. BeginUpdate;
sl. Skaidrs;
mēģiniet
kamēr Garums (txt)> 0 darīt
sākt
dx: = Pos (atdalītājs, txt);
ns: = Kopēt (txt, 0, dx-1);
sl. Pievienot (ns);
txt: = Kopēt (txt, dx + delta, MaxInt);
beigas;
beidzot
sl. EndUpdate;
beigas;
beigas;
~~~~~~~~~~~~~~~~~~~~~~~~~

Lietojums (aizpilda Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajičs;; DelphiGuide ','; ')

instagram story viewer