c/src/readfile.c

157 lines
No EOL
3.6 KiB
C

#include "../header/readfile.h"
#define MAXLINE 50
int getNbLines(FILE * readFile)
{
int c,count=0;
do{
c=getc(readFile);
if(c == 0xa)
{
count++;
}
}while(c!=0xffffffff);
return count+1;
}
void getStringFromFile(FILE * readFile,int nbLines,char * returnString,int * size)
{
int i;
char temp[MAXLINE];
*size=0;
strcpy(returnString,"");
fseek(readFile,0,0);
for(i=0;i<nbLines;i++)
{
fgets(temp,100,readFile);
*size+=strlen(temp);
strcat(returnString,temp);
}
}
int getFileSize(FILE * readFile)
{
fseek(readFile,0,2);
int returnValue = ftell(readFile);
fseek(readFile,0,0);
return returnValue;
}
/**
* @brief Debug uniquement : récupère une ligne, non optimisé donc inutilisable
*
* @param string la chaîne de caractère à analyser
* @param line int la ligne à récupérer
* @return char* la ligne sous un string
*/
char * getLine(char * string,int line)
{
int j=0,k=0;
char * returnString = (char *)(malloc(MAXLINE*sizeof(char)));
for(int i=0;i<line;i++)
{
k=0;
strcpy(returnString,"");
while(*(string+j) != '\n')
{
*(returnString+k)=*(string+j);
j++;
k++;
}
j++;
}
*(returnString+k)='\0';
return returnString;
}
/**
* @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:
strcpy(team,getLine(string,i));
break;
default:
string2Coureur(getLine(string,i),nom,prenom,&dossard);
coureur * coureurTemp = creerCoureur(nom,prenom,dossard,team,0);
ajoutListe(&l,coureurTemp);
}
j++;
if(j>5)
{
j=0;
}
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");
}