Есть много раз, когда вам нужно разделить строка в массив строк с использованием символа в качестве разделителя. Например, файл CSV (разделенный запятыми) может иметь строку типа «Zarko; Gajic;; DelphiGuide ", и вы хотите, чтобы эта строка была разбита на 4 строки (строки)" Zarko "," Gajic "," "(пустая строка) и" DelphiGuide "с использованием символа точки с запятой"; "в качестве разделителя.
Delphi предоставляет несколько методов для анализа строки, но вы можете обнаружить, что ни один из них не делает именно то, что вам нужно. Например, метод RTL ExtractStrings всегда использует символы кавычек (одинарные или двойные) для разделителей. Другой подход заключается в использованииРазделитель иDelimitedText свойства класса TStrings - но, к сожалению, в реализации есть ошибка («внутри» Delphi), где символ пробела всегда используется в качестве разделителя.
~~~~~~~~~~~~~~~~~~~~~~~~~
процедура ParseDelimited (const sl: TStrings; постоянное значение: строка; разделитель констант: строка);
вар
дх: целое число;
нс: строка;
txt: строка;
дельта: целое число;
начать
дельта: = длина (разделитель);
txt: = значение + разделитель;
уровень моря BeginUpdate;
уровень моря Ясно;
пытаться
тогда как Length (txt)> 0 do
начать
dx: = Pos (разделитель, txt);
ns: = Copy (txt, 0, dx-1);
уровень моря Добавить (нс);
txt: = Copy (txt, dx + delta, MaxInt);
конец;
наконец
уровень моря EndUpdate;
конец;
конец;
~~~~~~~~~~~~~~~~~~~~~~~~~
Использование (заполняет Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide», ';')