#include "abbas_roth_header.h"


void lecture(const char* fichier,regles* regs)
{
        ifstream fic(fichier, ios::in);  // on ouvre le fichier en lecture
        if(!fic)                        // si l'ouverture échoue
        {
                cerr << "Impossible d'ouvrir le fichier !" << endl;
                exit (-1);
        }


        int t_num;                  //pour stocker le numéro de la règle
        char temp_char;             //caracère en cours de lecture
        char tableau_temp_de_lecture[26];
        int taille_utile_du_tableau=0;
        int nb_regles;
        fic>>nb_regles;                          //le premier nombre du fichier texte représente le nombre de regles
        regs->tab_reg=new regle*[nb_regles];    //allocation d'un tableau de n regles

        fic>>t_num;                             //numéro de la règle
        while (t_num!=0)        //tant que ce n'est pas un # (fin des règles)
        {
            taille_utile_du_tableau=0;                  //taille du tableau de conditions (mis à jour dynamiquement)
            fic>>temp_char; // on passe les ":"
            fic>>temp_char; //on lit la première cond
            while (temp_char!='=') //tant qu'on est dans les conditions
            {
                if (temp_char!='*') ///Pour le moment, on ne gère que les ET logiques
                {
                    tableau_temp_de_lecture[taille_utile_du_tableau]=temp_char; //on ajoute la condition qu'on a lu au tableau temporaire
                    taille_utile_du_tableau+=1; //on met a jour la taille utile du tableau de conditions
                }
                fic>>temp_char; //on lit le caractère suivant
            }
            regle* tmp_reg;                                   //
            tmp_reg=new regle;                               //création d'une nouvelle regle
            tmp_reg->num=t_num;                               //son numéro
            tmp_reg->t_cond=taille_utile_du_tableau;            //le nb de conditions
            tmp_reg->tab_cond=new char[taille_utile_du_tableau]; // on prépare le tableau de conditions
            for (int i=0; i<taille_utile_du_tableau; i++) //on copie les conditions lues dans la structure
            {
                tmp_reg->tab_cond[i]=tableau_temp_de_lecture[i];
            }
            //Lecture des conditions de la règle finie

            //Lecture de la conclusion
            fic>>tmp_reg->ccl;                  //on lit la ccl
            regs->tab_reg[regs->t_reg]=tmp_reg; //on l'ajoute aux règles
            regs->t_reg++;

            fic>>t_num;                         //on lit le caractère suivant pour voir si c'est un #
        }


        fic.close();
        return;
}
