Разбор на разграничен низ в списък с струни (Delphi)

click fraud protection

Има много пъти, когато трябва да разделите a низ в ан масив на низовете, като се използва знак като разделител. Например, CSV файл (разделен със запетая) може да има ред като "Zarko; Гаич;; DelphiGuide "и искате този ред да се раздели на 4 реда (низове)" Zarko "," Gajic "," "(празен низ) и" DelphiGuide ", използвайки символа на полу-двоеточие"; "като разделител.

Delphi предоставя няколко метода за разбор на низ, но може да откриете, че нито един не прави точно това, от което се нуждаете. Например, методът RTL ExtractStrings винаги използва символи за цитиране (единични или двойни) за разделители. Друг подход е използването наразделител иDelimitedText свойства на клас TStrings - но за съжаление има грешка в реализацията („вътре“ в Delphi), където символът за интервал винаги се използва като разделител.

~~~~~~~~~~~~~~~~~~~~~~~~~
процедура ParseDelimited (const sl: TStrings; стойност на const: низ; ограничител const: низ);
Var
dx: цяло число;
ns: низ;
txt: низ;
делта: цяло число;
започвам
делта: = дължина (разделител);

instagram viewer

txt: = стойност + разделител;
SL. BeginUpdate;
SL. Ясно;
опитвам
докато Дължина (txt)> 0
започвам
dx: = Pos (разделител, txt);
ns: = Копиране (txt, 0, dx-1);
SL. Добавяне (ns);
txt: = Копиране (txt, dx + delta, MaxInt);
край;
накрая
SL. EndUpdate;
край;
край;
~~~~~~~~~~~~~~~~~~~~~~~~~

Употреба (попълва се в Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Гаич;; DelphiGuide ","; ")

instagram story viewer