Как преобразовать строку с разделителями в список строк

Часто бывает необходимо разделить строку на массив строк, используя символ в качестве разделителя. Например, файл CSV (разделенный запятыми) может содержать строку типа «Zarko; Gajic ;; DelphiGuide», и вы хотите, чтобы эта строка была разбита на 4 строки (строки) «Zarko», «Gajic», «» ( пустая строка) и “DelphiGuide” с использованием символа точки с запятой “;” в качестве разделителя.

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

Единственное решение для синтаксического анализа строки с разделителями – написать собственный метод:

Пример строки с разделителями

~~~~~~~~~~~~~~~~~~~~~~~ ~~
процедура ParseDelimited (const sl: TStrings; const value: string; const delimiter: string);
var
dx: integer;
ns: string;
txt: string;
delta: integer;
begin
delta: = Length (delimiter);
txt: = value + delimiter;
sl.BeginUpdate;
sl.Clear;
попробуйте
while Length (txt)> 0 do
begin
dx: = Pos (delimiter, txt);
ns: = Copy (txt, 0, dx-1);
sl.Add (ns);
txt: = Copy (txt, dx + delta, MaxInt);
end;
finally
sl.EndUpdate;
end;
end;
~~ ~~~~~~~~~~~~~~~~~~~~~~

Использование (заполняет Memo1):
ParseDelimited (Memo1.lines, ‘Zarko; Gajic ;; DelphiGuide’, ‘;’)

Оцените статью
recture.ru
Добавить комментарий