A partir d'un fichier lit un coureur et les mets dans une liste

This commit is contained in:
Yohan Boujon 2022-11-27 16:54:44 +01:00
parent cfd9e3cb7b
commit 84d0d0a445
6 changed files with 91 additions and 16 deletions

View file

@ -1,3 +1,5 @@
#ifndef HEADER_COUREUR
#define HEADER_COUREUR
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -15,3 +17,4 @@ typedef struct{ //definition de la structure
coureur * creerCoureur(char nom[],char prenom[],int dossard, char equipe[],int temps);//Creation d'un coureur en memoire avec recupération de son adrresse avec le parametrage de c'est different champs
void ajouterTemps(int leTemps,coureur * leCoureur); //Modifier le temps d'un coureur a partir de son adresse et d'une valeur de cumule
void afficherCoureur(coureur * leCoureur); //Afficher le temps d'un coureur stocker en seconde sous forme d'heures, de minutes et de secondes ( a partir de l'adresse de sa structure de définition)
#endif

View file

@ -1,3 +1,5 @@
#ifndef HEADER_LISTE
#define HEADER_LISTE
#include "coureur.h" //inclure le fichier "coureur.h" qui contien les libs et la structure coureur
struct element{ //definition de la structure qui element qui sera encaspule/chaine
@ -25,3 +27,4 @@ int tailleListe(liste l); //retourne le no
coureur * getCoureur(liste l,int nb); //retourne le courreur contenue dans l'element nb d'une liste (on considere un element 0)
void invertCoureur(liste * l,int nb); //inverse l'element nb et nb+1 dans une liste (on considere un element 0)
void triListe(liste * l,int taille); //trie bulle des element d'une liste a partir du temps contenue dans la structure encapsule dans l'element
#endif

View file

@ -1,10 +1,16 @@
#ifndef HEADER_READFILE
#define HEADER_READFILE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "../header/liste.h"
int getNbLines(FILE * readFile);
int getFileSize(FILE * readFile);
void getStringFromFile(FILE * readFile,int nbLines,char * returnString,int * size);
char * getLine(char * string,int line);
void string2Coureur(char * string,int nbLines);
liste string2Liste(char * string,int nbLines);
void string2Coureur(char * string,char * nom, char * prenom, int * dossard);
void printHexString(char * string);
#endif

View file

@ -1,6 +1,5 @@
#include "../header/coureur.h" //inclure le fichier "coureur.h" qui contien les libs, structure et prototypes
/**
* @brief Creation d'un coureur en memoire avec recupération de son adrresse avec le parametrage de c'est different champs
fonctionnement :
@ -31,8 +30,6 @@ coureur * creerCoureur(char nom[],char prenom[],int dossard, char equipe[],int t
return leCoureur;
}
/**
* @brief Modifier le temps d'un coureur a partir de son adresse et d'une valeur de cumule
*
@ -44,8 +41,6 @@ void ajouterTemps(int leTemps,coureur * leCoureur)
leCoureur->temps+=leTemps;
}
/**
* @brief Afficher le temps d'un coureur stocker en seconde sous forme d'heures, de minutes et de secondes ( a partir de l'adresse de sa structure):
-initilisation de 3 variable tampon

View file

@ -11,7 +11,8 @@ int main(void)
int stepsNb = atoi(getLine(fileString,1));
int teamsNb = atoi(getLine(fileString,2));
printf("Nombre d'etapes : %d\t Nombre d'equipes :%d\n",stepsNb,teamsNb);
string2Coureur(fileString,fileLines);
liste l = string2Liste(fileString,fileLines);
printlist(l);
return 0;
}
@ -43,7 +44,6 @@ liste initListe(void)
return l;
}
/**
* @brief ajout d'un element contenant un coureur dans liste
* fonctionnement :
@ -64,7 +64,6 @@ void ajoutListe(liste * listeActuel,coureur * leCoureur)
listeActuel->courant=elementActuel;
}
/**
* @brief affiche tous les coureurs contenue dans les elements d'une liste
* fonctionnement :
@ -126,7 +125,6 @@ coureur * coureurCourant(liste * l)
return l->courant->coureurActuel;
}
/**
* @brief suprime un element(a partir de l'adresse d'un coureur) dans la liste sans briser le chainage
* fonctionnement :

View file

@ -64,24 +64,94 @@ char * getLine(char * string,int line)
return returnString;
}
void string2Coureur(char * string,int nbLines)
/**
* @brief
*
* @param string
* @param nbLines
*/
liste string2Liste(char * string,int nbLines)
{
int j=0;
char * team = (char *)(malloc(MAXLINE*sizeof(char)));
liste l = initListe();
for(int i=3;i<=nbLines;i++)
{
char * nom = (char *)(malloc(MAXLINE*sizeof(char)));
char * prenom = (char *)(malloc(MAXLINE*sizeof(char)));
int dossard=0;
switch(j)
{
case 0:
printf("Nom de l'equipe : %s\n",getLine(string,i));
strcpy(team,getLine(string,i));
break;
default:
printf("Coureur : %s\n",getLine(string,i));
string2Coureur(getLine(string,i),nom,prenom,&dossard);
coureur * coureurTemp = creerCoureur(nom,prenom,dossard,team,0);
ajoutListe(&l,coureurTemp);
}
j++;
if(j>5)
{
j=0;
printf("\n");
}
free(nom);
free(prenom);
}
return l;
}
/**
* @brief A partir d'une ligne récupère les informations sur le coureur,
* Notamment son numéro de dossard, son nom et son prénom
*
* @param string char * ligne textuel
* @param nom char * renvoi le nom du coureur, doit être vide
* @param prenom char * renvoi le nom du coureur, doit être vide
* @param dossard int * renvoi le numéro du dossard
*/
void string2Coureur(char * string,char * nom, char * prenom, int * dossard)
{
int i=0,j=0,k=0;
char * temp = (char *)(malloc(MAXLINE*sizeof(char)));
while(string[j]!='\0'){
k=0;
while(string[j] != ',' && string[j]!='\0'){
temp[k] = string[j];
j++;
k++;
}
temp[k]='\0';
j++;
switch(i)
{
case 0:
*dossard = atoi(temp);
break;
case 1:
strcpy(nom,temp);
break;
case 2:
strcpy(prenom,temp);
break;
default:
}
i++;
}
free(temp);
}
/**
* @brief Debug uniquement, permet d'observer les valeurs de chaque caractère.
* la taille n'est pas demandée pour observer au delà de l'espace mémoire donné
*
* @param string un tableau de caractère
*/
void printHexString(char * string)
{
for(int i=0;i<MAXLINE;i++)
{
printf("0x%x, ",string[i]);
}
printf("\n\n");
}