Avíza

Ako analyzovať oddelený reťazec do zoznamu reťazcov

Ako analyzovať oddelený reťazec do zoznamu reťazcov



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.

Mnohokrát potrebujete rozdeliť reťazec do poľa 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 bodkočiarky „;“ ako oddeľovač.

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č.

Jediným riešením, ako analyzovať oddelený reťazec, je napísať vlastnú metódu:

Príklad oddeleného reťazca

~~~~~~~~~~~~~~~~~~~~~~~~~
procedúra ParseDelimited (const sl: TStrings; const value: 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.Clear;
vyskúšať
zatiaľ čo Dĺžka (txt)> 0
začať
dx: = Pos (oddeľovač, txt);
ns: = kópia (txt, 0, dx-1);
sl.Add (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', '')