CSV files are a de facto standard for communication of data. AIMMS provides the libraries
DataLink
CSVProvider
This article shows an example of how to read data from a CSV file.
DataLink
CSVProvider
Replace s_datatable with EP_datatable in your DataMap statement. You added EP_datatable as a new element to the set S_datatable, and assigned S_datatable to the set dl::DataTables. In the DataMap statement, dl::dt refers to an index/element in the set dl::DataTables, so when you provide S_datatable to that argument - you are referring to the entire set itself and not an index/element in the set.
DataMap(dl::dt,dl::idn,dl::cn,dl::dn) := data {
( S_datatable, sLocs, 1, 1 ) : "location",
( S_datatable, sProd, 2, 2 ) : "product",
( S_datatable, pDem , 3, 0 ) : "demand",
( S_datatable, spCmt, 4, 0 ) : "comment"
};
to
DataMap(dl::dt,dl::idn,dl::cn,dl::dn) := data {
( EP_datatable, sLocs, 1, 1 ) : "location",
( EP_datatable, sProd, 2, 2 ) : "product",
( EP_datatable, pDem , 3, 0 ) : "demand",
( EP_datatable, spCmt, 4, 0 ) : "comment"
};
Hi,
I’m new to AIMMS and I’m trying to read multiple csv files with the file name dynamically updates.
I created a procedure as follows:
Empty data_declarations ;
SetElementAdd(S_datatable, EP_datatable, SP_filename);
dl::DataTables := S_datatable ;
DataMap(dl::dt,dl::idn,dl::cn,dl::dn) := data {
( S_datatable, sLocs, 1, 1 ) : "location",
( S_datatable, sProd, 2, 2 ) : "product",
( S_datatable, pDem , 3, 0 ) : "demand",
( S_datatable, spCmt, 4, 0 ) : "comment"
};
dl::RemoveDataSourceMapping("TheMapping");
dl::AddDataSourceMapping("TheMapping", DataMap, dl::DependEmpty, dl::TableAttributesEmpty, dl::ColAttributeEmpty);
spCommunicationAttributes :=
{ 'DataProvider' : csvprov::DataLink ,
'ContainsHeaders' : "yes"
! Note that Separator attribute is left to its default of ",".
};
dl::DataRead("komma", ! reading from data source "komma" - because we use csvprovider this data source is a folder.
"TheMapping" , ! using relation "TheMapping" between folder komma and AIMMS identifiers.
spCommunicationAttributes); ! Technicalities on how to communicate.
Also I created a set and string parameter as instructed by tutorial.
Set S_datatable {
SubsetOf: dl::DataTables;
Parameter: EP_datatable;
}
StringParameter SP_filename;
But when I run the procedure, it gives me the following error:
The element S_datatable is not in the range set of the running index dt.
Can you please help resolve this issue.
Thanks
Already have an account? Login
Please use your business or academic e-mail address to register
No account yet? Create an account
Enter your username or e-mail address. We'll send you an e-mail with instructions to reset your password.
Didn't find what you were looking for? Try searching on our documentation pages: