Analyzovat oddělený řetězec do seznamu řetězců (Delphi)

click fraud protection

Mnohokrát potřebujete rozdělit tětiva do pole řetězců pomocí znaku jako oddělovače. Například soubor CSV (oddělený čárkami) může mít řádek jako „Zarko; Gajic;; DelphiGuide "a chcete, aby byl tento řádek rozebrán na 4 řádky (řetězce)" Zarko "," Gajic "," "(prázdný řetězec) a" DelphiGuide "pomocí oddělovače středník"; ".

Delphi poskytuje několik metod pro analýzu řetězce, ale možná zjistíte, že ani jeden neudělá přesně to, co potřebujete. Například metoda ExtractStrings RTL vždy používá oddělovače znaků (jednoduché nebo dvojité). Dalším přístupem je použitíOddělovač aDelimitedText vlastnosti třídy TStrings - ale bohužel existuje chyba v implementaci („uvnitř“ Delphi), kde je znak mezery vždy použit jako oddělovač.

~~~~~~~~~~~~~~~~~~~~~~~~~
procedura ParseDelimited (const sl: TStrings; const value: string; oddělovač const: string);
var
dx: celé číslo;
ns: string;
txt: string;
delta: celé číslo;
začít
delta: = délka (oddělovač);
txt: = hodnota + oddělovač;
sl. BeginUpdate;
sl. Průhledná;
Snaž se
zatímco Délka (txt)> 0 ano

instagram viewer

začít
dx: = Pos (oddělovač, txt);
ns: = Kopie (txt, 0, dx-1);
sl. Přidat (ns);
txt: = Kopie (txt, dx + delta, MaxInt);
konec;
Konečně
sl. EndUpdate;
konec;
konec;
~~~~~~~~~~~~~~~~~~~~~~~~~

Použití (vyplní Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide ','; ')

instagram story viewer