Чтение данных CSV в набор с индексом

Я хотел бы попросить вашей помощи с проблемой я занимаюсь около недели. Я везде искал решение. Официальный документ недостаточно точен и ничего не говорит по этому поводу.

Проблема в следующем: это часть моего CSV-файла "food.csv". Здесь я скопировал только 6 столбцов только для небольшого превью данных.

Name    Index   A   E   K   C
Rice    1   0   0   0   0
Lentils 2   0.39    5   0.05    44
Carrot  3   167.05  7   132 59
Potato  4   0.03    0   21  74
Apple   5   0.38    1   6   0.04

Я импортирую его в линейную программу GNU MathProg, используя оператор table. Проблема в том, что для каждого столбца я вынужден использовать отдельный параметр. Я бы предпочел индексировать столбцы в один двумерный параметр, чтобы я мог легко перебирать их.

set fields;
param kc{i in 1..card(fields)}, symbolic; # symbolic only for the example, normally it's numeric
table data IN "CSV" "food.csv": fields <- [Index], kc~Kcal;

Проблема в том, что я должен использовать отдельный параметр для каждого столбца, если у меня есть около 40 столбцов и два ограничения для каждого из этих столбцов, это дает около 80 ограничений в отдельных строках, если я хочу что-то изменить, мне нужно изменить 80 строк кода, потому что я не могу перебирать столбцы и упрощать его.

Здесь я помещаю то, что разобрано из файла CSV.

Display statement at line 213
kc[1] = '1.12'
kc[2] = '3.53'
kc[3] = '0.41'
kc[4] = '0.86'
kc[5] = '0.48'
kc[6] = '3.89'
kc[7] = '0.36'
kc[8] = '1.89'
kc[9] = '8.84'
kc[10] = '0.72'
kc[11] = '1.2'
kc[12] = '2.95'
kc[13] = '6.54'
kc[14] = '5.41'
kc[15] = '0.81'
kc[16] = '1.49'
kc[17] = '0.4'

И что было бы более интересно, это иметь что-то вроде:

kc[1][1] # first entry, first column
kc[1][2] # first entry, second column
kc[2][5] # second entry entry, fifth column

Кто-нибудь знает, как этого добиться?


person Marek    schedule 21.09.2014    source источник


Ответы (1)


Ваши входные данные (например, food.csv) не совпадают с вашими проанализированными выходными данными.

Пожалуйста, опубликуйте правильные данные (т.е. входные данные и желаемые выходные данные), чтобы мы могли вам помочь.

Легко решить вашу проблему. Вы видите пример для данных CSV в файлах дистрибутива GLPK/MathProg в папке ../examples/csv, транспортной модели. Он использует csv в качестве ввода и вывода.

Это пример синтаксиса (ниже).

набор I; /* консервные заводы */

установить J; /* рынки */

установить K размер 2; /* транспортная полоса */

param d{i в I, j в J}; /* расстояние в тысячах миль */

таблица tab_distance В "CSV" "distances.csv": K‹- [завод, рынок], d ~ расстояние;

person ns-1m    schedule 14.10.2014