Existuje veľa prípadov, keď potrebujete rozdeliť povrázok do rad pomocou znaku ako oddeľovača. Napríklad súbor CSV (oddelený čiarkou) môže mať riadok ako „Zarko; Gajic;; DelphiGuide "a chcete, aby bol tento riadok analyzovaný do 4 riadkov (reťazcov)" Zarko "," Gajic "," "(prázdny reťazec) a" DelphiGuide "pomocou znaku s dvojbodkou"; "ako oddeľovača.
Delphi poskytuje niekoľko metód na analýzu reťazca, ale možno zistíte, že ani jeden nerobí presne to, čo potrebujete. Napríklad metóda ExtractStrings RTL vždy používa oddeľovače pre úvodzovky (jednoduché alebo dvojité). Ďalším prístupom je použitie internetuoddeľovač aDelimitedText vlastnosti triedy TStrings - ale nanešťastie existuje chyba v implementácii („vnútri“ Delphi), kde sa znak medzery vždy používa ako oddeľovač.
~~~~~~~~~~~~~~~~~~~~~~~~~
procedúra ParseDelimited (const sl: TStrings; const hodnota: string; oddeľovač const: string);
var
dx: celé číslo;
ns: string;
txt: string;
delta: celé číslo;
začať
delta: = dĺžka (oddeľovač);
txt: = hodnota + oddeľovač;
sl. BeginUpdate;
sl. Jasný;
vyskúšať
zatiaľ čo Dĺžka (txt)> 0
začať
dx: = Pos (oddeľovač, txt);
ns: = kópia (txt, 0, dx-1);
sl. Pridať (ns);
txt: = Kópia (txt, dx + delta, MaxInt);
koniec;
konečne
sl. EndUpdate;
koniec;
koniec;
~~~~~~~~~~~~~~~~~~~~~~~~~
Použitie (vyplní Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide ',' ')