main.c 3.85 KB
#include <stdio.h>
#include <stdlib.h>
#define NBC 20
#define NBO 40
#define NBF 10
#define LINE_MAX 1000


#include <string.h>



typedef struct Oeuvres Oeuvres;
struct Oeuvres
{
	char title[LINE_MAX];
	char annee[LINE_MAX];
	char commentaire[LINE_MAX];
    Oeuvres *suivant;

};


typedef Oeuvres *ptoeuvres, *liste_chaine;


typedef struct Realisateur Realisateur;
struct Realisateur
{
	char nom[LINE_MAX];
    char prenom[LINE_MAX];
    ptoeuvres filmographe;
    Realisateur *suivant;
};

typedef Realisateur *ptrealisateur, *liste_realisateur;

typedef struct
{
	Realisateur realisateur;
	ptrealisateur suivant;

}REALISATEUR;


int readPartOfLine(int a,int b,char line[LINE_MAX],char part[LINE_MAX])
{


    int debut = a;
    int endAv = b;
    int av = 0;
    while(debut < endAv)
    {

        part[av] = line[debut];
        debut++;
        av++;
    }
    part[av] = '\0';
    return debut;

}
void readElement(char element[LINE_MAX],ptoeuvres film)
{




    int begin = 0;
    if(element[0] == '\t')
        begin = 2;
    int Pbegin = strpbrk(element,"(") - element;
    int Pend =strpbrk(element,")") - element;
    int end = findEnd(element);

    readPartOfLine(begin,Pbegin,element,film->title);

    readPartOfLine(Pbegin+1,Pend,element,film->annee);

    readPartOfLine(Pend+1,end,element,film->commentaire);
    printf("titre : %s , annee : %s , commentaire : %s \n",film->title,film->annee,film->commentaire);


}
int findEnd(char line[LINE_MAX])
{
    int av = 0;
        while(line[av] != '\n')
            av++;
     return av;
}
void initOeuvre(ptoeuvres oe)
{


    int e;
    for(e = 0;e<LINE_MAX;e++)
    {
        oe->annee[e] = malloc(sizeof(char));
        oe->commentaire[e] = malloc(sizeof(char));
        oe->title[e] = malloc(sizeof(char));
    }
    oe->suivant = malloc(sizeof(Oeuvres));


}
void readFile(FILE *file, ptrealisateur database)
{


    char line[LINE_MAX];
    int av = 0;

    int first = 0;

    int virgule = 0;
    int tab = 0;
    int end = 0;

    char element[LINE_MAX];



    ptrealisateur actualReal = database;
    ptoeuvres actualOeuvre = NULL;


    actualReal->filmographe = malloc(sizeof(Oeuvres));
    actualOeuvre = actualReal->filmographe;





   char *ret;
    while(av == 0)
    {

        if(fgets(line,LINE_MAX,file) != NULL)
        {


        ret = strpbrk(line,",");
            if(ret != NULL)
            {

                    if(first == 1)
                    {

                        actualReal->suivant = malloc(sizeof(Realisateur));
                        actualReal = actualReal->suivant;
                        actualReal->filmographe = malloc(sizeof(Oeuvres));
                    actualOeuvre = actualReal->filmographe;
                        initOeuvre(actualOeuvre);
                    }


                first = 1;

                virgule = ret - line;
                tab = strpbrk(line,"\t") - line;
                end = findEnd(line);
                readPartOfLine(0,virgule,line,actualReal->nom);
                readPartOfLine(virgule+1,tab,line,actualReal->prenom);

                printf("nom : %s prenom : %s \n",actualReal->nom,actualReal->prenom);

                readPartOfLine(tab+1,end,line,element);

                readElement(element,actualOeuvre);


                actualOeuvre = actualOeuvre->suivant;



            }
            else if(strcmp(line,"\n") != 0)
            {



                initOeuvre(actualOeuvre);



                readElement(line,actualOeuvre);

                actualOeuvre = actualOeuvre->suivant;



            }

        }
        else
            av = 1;



    }

}


int main()
{


    Realisateur database;
    ptrealisateur ptDataBase = &database;
    database.filmographe = malloc(sizeof(Oeuvres));
    initOeuvre(database.filmographe);
    FILE* fichier = NULL;
    fichier = fopen("very_small_example.list", "r+");

    readFile(fichier,ptDataBase);


    return 0;
}