diff --git a/main.c b/main.c new file mode 100644 index 0000000..cd52091 --- /dev/null +++ b/main.c @@ -0,0 +1,222 @@ +#include +#include +#define NBC 20 +#define NBO 40 +#define NBF 10 +#define LINE_MAX 1000 + + +#include + + + +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;eannee[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; +} -- libgit2 0.21.2