Lecture dans un fichier texte [Résolu]

Signaler
Messages postés
16
Date d'inscription
mercredi 23 avril 2008
Statut
Membre
Dernière intervention
30 juillet 2009
-
Messages postés
16
Date d'inscription
mercredi 23 avril 2008
Statut
Membre
Dernière intervention
30 juillet 2009
-
Bonjour,

J'ai un problème avec une fonction qui doit me servir à lire des infos dans un fichier de configuration pour une application que je développe. C'est probablement une erreur bête mais je ne la vois pas. J'ai crée un fichier conf.txt, qui contient:

Reader0=1
Reader1=0
Reader2=0
Reader3=0
Reader4=0
Reader5=0
Reader6=0
Reader7=0
Reader8=0
Info1=1
Info2=1
POLLINGTIME=50000


Pour l'instant je cherchais juste à lire le fichier ligne par ligne:

uint32_t ParseConfigFile(void)
{
FILE *safe;
char toto[50]; 
if((safe=fopen("conf.txt","r"))!=NULL)
{
while( NULL != (fgets(toto, 32, safe)) )
{

printf("config: %s",toto); //affichage de la ligne lue
}
fclose(safe);
}	
return 0;
}


mais en sortie j'obtiens ça:

config: Reader0=1
config: Reader1=0
config: Reader2=0
config: Reader3=0
config: Reader4=0
config: Reader5=0
config: Reader6=0
config: Reader7=0
config: Reader8=0
config: Info1=1config:
config: Info2=1config:
config: POLLINGTIMEconfig: =50000


Les 3 dernières lignes comportent des erreurs!
J'ai l'impression qu'il y a des caractères qui trainent dans mon fichier texte mais j'ai beau le réécrire l'erreur reste la même...
Si vous pouviez m'orienter sur la bonne voie ça m'aiderais beaucoup!
Merci d'avance!

2 réponses

Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011

Bizarre...
Tu as le même soucis si tu vides ton buffer après avoir affiché?
memset (toto, '\0', sizeof(toto));
Messages postés
16
Date d'inscription
mercredi 23 avril 2008
Statut
Membre
Dernière intervention
30 juillet 2009

Bon bin j'ai vu le problème envolé lorsque j'ai avancé dans mon algorithme:

uint32_t ParseConfigFile(void)
{
int dwIndex=0;
int nbLigne=0;
FILE *fichier;
char ligne[64];
char champ[16]; 
if((fichier=fopen("conf.txt","r"))!=NULL)
{
while( NULL != (fgets(ligne, sizeof(ligne), fichier)) )
{
nbLigne++;
printf("config line %d: %s",nbLigne,ligne);
while(ligne[dwIndex]!='=') 
        {
dwIndex++;
if(dwIndex>sizeof(ligne)) break;
}
if(!(dwIndex>sizeof(ligne)))
{
memcpy(champ,ligne,dwIndex);
champ[dwIndex]='\0';
printf("champ: %s\n",champ);
}		
}
fclose(fichier);
}	
return 0;
}


Mais effectivement Katerson avec ta ligne en plus après chaque printf ça m'enlève effectivement l'erreur d'avant...Je trouves pas ça logique, puisque si on à une ligne court suivi d'une ligne longue, la ligne longue écrase la ligne courte et donc lors d'un printf il ne reste plus qu'un seul caractère de fin de ligne... alors qu'au contraire si on à une ligne longue suivie d'une ligne courte, on pourra avoir deux caractère de fin de ligne dans le buffer mais le premier, celui de la ligne courte, sera vu, et l'autre non, et la encore aucun problème.

Dans tout les cas merci de ta réponse, j'en tiendrais compte!