Здравствуйте!
К сожалению, { вспомогательная процедура для обработки отдельной строки } не сможет правильно разобрать строку из CSV-файла экспорта переменных, содержащую пустые поля (и "пробелы").
Для разбора CSV-строки можно использовать функции из примера заполнения таблиц описанием переменных из CSV-файла:
// выбор поля по индексу (произвольный выбор)
function GetField(const aStr: string; const n: integer): string;
var i, j: integer;
aStr1: string;
begin
j := 1; aStr1 := '';
for i := 1 to Length(aStr) do begin
if aStr[i] = ';' then begin
if j = n then begin GetField := aStr1; exit; end; // индекс выбора поля равен номеру выбранного поля
aStr1 := ''; // новое поле
j := j + 1;
end
else aStr1 := aStr1 + Astr[i];
end;
GetField := aStr1; // пусто или последнее поле с отсутствующим разделителем ";"
end;
// последовательный выбор полей
function GetField2(const aStr: string; var n: integer): string;
var i: integer;
aStr1: string;
begin
aStr1 := '';
for i := n to Length(aStr) do
if aStr[i] = ';' then begin
n := i + 1; // запомнить начало следующего поля
GetField2 := aStr1;
exit;
end
else aStr1 := aStr1 + Astr[i];
GetField2 := aStr1;
end;
var aStr: string;
i, j, k: integer;
begin
// открываем текстовый файл для чтения
if TextFileOpen('MyCSV.csv', '', fomReset, fcpDefault) then begin
TextFileReadLn; // пропустить первую строку
i := 0;
with Table1 do
while (not TextFileEOF) and (i < RowCount) do begin // цикл с проходом по каждой строке текстового файла или до переполнения таблицы
aStr := TextFileReadLn;
// функция GetField()
for j := 1 to ColumnsCount do GetCell(j - 1, i).Text := GetField(aStr, j);
for j := 0 to 3 do // заполнение Table3 выбранными столбцами
case j of
0: Table3.GetCell(j, i).Text := GetField(aStr, 2); // Имя переменной
1: Table3.GetCell(j, i).Text := GetField(aStr, 3); // Тип данных
2: Table3.GetCell(j, i).Text := GetField(aStr, 8); // Начальное значение
3: Table3.GetCell(j, i).Text := GetField(aStr, 32); // ID
end;
// функция GetField2() - заполнение таблицы Table2 идентичной таблице Table1
k := 1; // индекс начала очередного поля в строке разбора aStr
for j := 1 to ColumnsCount do Table2.GetCell(j - 1, i).Text := GetField2(aStr, k);
i := i + 1;
end;
TextFileClose;
end;
end.