Рассмотрим случай, когда необходимо считывать значения, разделенные точкой с запятой из CSV-файла. Любой текстовый файл (как и ".csv") считывается построчно, строчка за строчкой. После считывания строки, с ней можно произвести необходимые операции, например разбить на отдельные значения разделенные точкой с запятой. Пример кода для работы с CSV-файлом:
// вспомогательная процедура для обработки отдельной строки
procedure ProcStr(const AStr: string);
var
I: Integer;
aBuf: string;
// эта подпроцедура вызывается каждый раз когда из строки было извлечено
// значение отделённое ";"
procedure OnDone;
begin
if aBuf = '' then Exit; // игнорируем пустые значения
// ...
// здесь работаем с полученным значением, которое хранится в aBuf
// ...
aBuf := ''; // затем обнуляем буферную строку
end;
begin
aBuf := '';
for I := 1 to Length(AStr) do // проходим по каждому символу строки в цикле
if aStr[I] <> ';' then // если текущий символ не ";", то
begin
if aStr[I] <> ' ' then // игнорируем пробелы
aBuf := aBuf + AStr[I] // добавляем символ в буферную строку
end else // если дошли до ";", то
OnDone; // работаем с полученным значением
OnDone; // вызываем завершающую процедуру напоследок
end;
begin
// открываем текстовый файл для чтения
if TextFileOpen('MyCSV.csv', 'D:\', fomReset, fcpDefault) then
begin
while not TextFileEOF do // цикл с проходом по каждой строке текстового файла
ProcStr(TextFileReadLn); // считываем и обрабатываем очередную строку
TextFileClose; // закрываем файл
end;
end.
Допустим, файл "MyCSV.csv" имеет такую структуру:
id; value1; value2
1; 12.5; 12
2; 13.45; 11
, тогда приведенный выше код вызовет подпроцедуру OnDone девять раз. В первом вызове "aBuf" будет равна "id", во втором вызове "value1", в третьем "value2", в четвёртом "1", в пятом "12.5" и т.д.