Парсинг csv на delphi
Читая иностранные блоги, наткнулся на пост, в котором поднимается проблема парсинга и отображения в TStringGrid tsv файлов (tab-separated values — значения, разделенные символом табуляции, англ.). В таких файлах элементы в строках разделены знаком табуляции (девятым символом). Также не хочется забывать про не менее популярный формат csv — comma-separated values — в нём элементы разделены запятой. Стоит сказать, что программы для работы с таблицами просто обязаны читать эти два формата.

[Матчасть]

Как оказалось, delphi нам уже всё подготовил. Мы будем использовать два объекта TStringList и, очевидно, TStringGrid.
У объекта TStringList есть свойство Delimiter (разделитель — англ.). А сам TStringList по сути своей — массив строк.
DelimitedText — string. Строка, присвоенная DelimitedText, разобьётся, согласно Delimiter, и у нас становится TStringList с элементами строки. Впрочем, тот же explode на php.
QuoteChar — это свойство нам сегодня не пригодится, но упомянуть стоит. Например, у нас есть строка «delimiter»;»delimitedtext»;»quotechar»;»tstringlist». Элементы в ней не только разделены точкой с запятой, но еще и заключены в кавычки. В этом случае Delimiter ставим как ;, а QuoteChar как «. И легким движением руки мы получаем список из ключевых слов данного поста :)
Хотел сначала написать, что функция explode на php так не может (ха-ха), а потом прочитал, что там есть готовая функция fgetcsv, Нагайченко Максим написал об этом в посте на своём блоге (на 10.06.2015 – ссылка не работает).

Готовим TStringGrid

Для будущей загрузки таблицы, в Object Inspector я изначально поставил ColCount=1, а FixedCols и FixedRows обратил в ноль.

Парсим csv

Допустим, у нас есть таблица c:\table.csv, которую нам предстоит загрузить в TStringGrid.
Наши действия: каждую строку построчно разбиваем на элементы с помощью вышеописанных свойств и вставляем в TStringGrid.
В примере я использовал второй TStringList для открытия файла. Для больших таблиц также неплохо будет использование стандартного построчного получения файла, перешедшего из паскаля (AssignFile, Reset, ReadLn), но сегодня акцент не на этом.

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
  sdata, srow: TStrings;
  i:integer;
begin
  sdata:=TStringList.Create;
  srow:=TStringList.Create;
  srow.Delimiter:=',';
  sdata.LoadFromFile('c:\table.csv');
  StringGrid1.RowCount:=sdata.Count;
  for i:=0 to sdata.Count-1 do begin
    srow.DelimitedText:=sdata[i];
    if srow.Count>StringGrid1.ColCount then
      StringGrid1.ColCount:=srow.Count;
    StringGrid1.Rows[i].Assign(srow);
  end;
  srow.Free;
  sdata.Free;
end;

Небольшие пояснения: в sdata загружаем файл, строки из sdata по очереди парсим в srow, который каждый раз присваиваем следующей строке TStringGrid.

Про tsv и прочее

Для парсинга tsv свойству Delimiter нужно присвоить значение табуляции. Это девятый символ, #9, chr(9) — так можно записать. Согласно википедии, csv и tsv объединяет формат dsv — delimiter-separated values, собственно его мы сегодня и отпарсили.

(c) crystalbit, http://parsers.info
RSS поток — будь в курсе!

А вы знаете два основных типа проблем с ноутбуком? В одном случае ноутбук не включается, в другом – не загружается. Причин может быть – аккумулятор, проблемы с материнкой и прочими комплектующими. Ноутбук, в отличие от стационарного компьютера, требует больше инструментов и более аккуратный подход. Лучше обращаться к профильному специалисту.