Tips and Tricks

Read from file

If the data map is defined in the AIMMS model then this model will contain the names of the tables and columns in the source. When we want to use this model using a source with different names we have to modify the model.

An easy way to decouple the model from the source is by defining the data map in a separate text file and store it next to the source. We can then use read from file ,to read the data map.

Suppose we have the following code:

dl::DataTables += {'TableNameInSource'} ;
SP_ClassicDataMap(dl::dt,dl::idn,dl::cn,dl::dn) := data {
    ! table            , identifier      , C, D   :  column name
    ( TableNameInSource, S_TheSet        , 1, 1 ) : "ColumnNameInSource",
    ( TableNameInSource, P_TheParameter  , 2, 0 ) : "OtherColumnNameInSource",
};
dl::AddDataSourceMapping(
    "TheMapping",              ! The name of this data map
    SP_ClassicDataMap,         ! The data map
    dl::DependEmpty,           ! not used
    dl::TableAttributesEmpty,  ! not used
    dl::ColAttributeEmpty      ! Column Attribute
);

We can make a text file datamap.txt containing:

SP_ClassicDataMap(dl::dt,dl::idn,dl::cn,dl::dn) := data {
     ( TableNameInSource, S_TheSet        , 1, 1 ) : "ColumnNameInSource",
     ( TableNameInSource, P_TheParameter  , 2, 0 ) : "OtherColumnNameInSource",
 };

Now we can change our code to:

read from file "datamap.txt";

dl::AddDataSourceMapping(
    "TheMapping",              ! The name of this data map
    SP_ClassicDataMap,         ! The data map
    dl::DependEmpty,           ! not used
    dl::TableAttributesEmpty,  ! not used
    dl::ColAttributeEmpty      ! Column Attribute
);

Here we see that the code no longer contains the names of the columns in the source.

Note

We also do not need to explicitly add the table names to dl::DataTables, this will happen automatically when reading the text file.