#include <ilcplex/ilocplex.h>
#include <iostream>
#include <fstream>
ILOSTLBEGIN
using namespace std;

//D'abord, on définit le type DataMatrix, ou matrice de données :
typedef IloArray<IloNumArray> DataMatrix;
DataMatrix M;
IloInt n=3;

/* Le format du fichier à lire est le suivant :
1,2,3|
4,5,6|
7,8,9|

Le fichier contient donc une matrice composée de 3 lignes,
et dont chaque ligne est composée de 3 éléments.
Les éléments sont séparés par ",", et la fin de chaque ligne est indiquée par "|". */

void getData(const IloEnv env, char nom_fichier[]) {
    char un_char;
    int nb_lu;

    ifstream fichier(nom_fichier);
    if(fichier) {
        M=DataMatrix(env,n); // M est une matrice carrée à n lignes et n colonnes
        for(int i=0;i<n;i++) {
            M[i]=IloNumArray(env); // On initialise la ième ligne de M
            for(int j=0;j<n;j++) {
                fichier >> nb_lu >> un_char;
                // Chaque ligne du fichier contient n fois le motif suivant :
                // un entier suivi d'un caractère ("," ou "|")
                M[i].add(nb_lu); // On ajoute l'entier lu à la ième ligne de M
            } // Fin de la lecture de la ième ligne de M
        }
        fichier.close();
    }
}

int main() {
    IloEnv env;
    getData(env, "donnees.txt"); // On va lire le fichier de nom "donnees.txt"
    cout << "Matrice lue :" << endl; // On affiche la matrice lue
    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            cout << "\t" << M[i][j];
        }
        cout << endl;
    }
    return 0;
}
