Решение, которое я разработал для чтения файла csv в структуру записи (фактически массив структур записей), представляет собой
program read_file_into_array_of_records;
{$APPTYPE CONSOLE}
uses
SysUtils, StrUtils;
type
Tscore = record
name : string [25];
marks : integer;
end;
var
input_file: TextFile;
file_record : string[100];
score : array [0..3] of Tscore;
index : integer;
// function that returns all text up to a comma or the end of the line
function get_value() : string;
var
comma_pos: integer;
value: string[100];
begin
comma_pos := Pos(',', file_record);
// if comma found cut out all text up to it
if comma_pos <> 0 then
begin
value := leftstr(file_record, comma_pos - 1);
delete(file_record, 1, comma_pos);
end
else
begin
// no comma found so just take everything that remains
value := file_record;
end;
get_value := value;
end;
// procedure to fill one record by breaking up the comma separated values
procedure fill_record (index: integer);
begin
// call the function get_value as many times as needed to get
// each comma separated value
score[index].name := get_value();
score[index].marks := strtoint(get_value());
end;
// procedure to fill array with contents of csv file
procedure fill_array ();
begin
index := 0;
while not EoF(input_file) do
begin
readln(input_file, file_record);
fill_record (index);
index := index + 1;
end;
end;
// procedure to display contents of array
procedure display_array ();
begin
for index := 0 to 3 do
begin
writeln(score[index].name, ' got ', score[index].marks, ' marks' );
end;
readln;
end;
// main prog
begin
assignfile(input_file, 'scores.csv');
reset(input_file);
fill_array ();
closefile(input_file);
display_array();
end.
содержимое файла Scores.csv:
Джеймс, 31
Джейн, 23
Тоби, 34
Руфь, 40