Lecture dans un fichier texte

Résolu
Hyperpenguin Messages postés 16 Date d'inscription mercredi 23 avril 2008 Statut Membre Dernière intervention 30 juillet 2009 - 30 juil. 2009 à 16:06
Hyperpenguin Messages postés 16 Date d'inscription mercredi 23 avril 2008 Statut Membre Dernière intervention 30 juillet 2009 - 30 juil. 2009 à 16:36
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

katerson Messages postés 47 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 24 juin 2011
30 juil. 2009 à 16:18
Bizarre...
Tu as le même soucis si tu vides ton buffer après avoir affiché?
memset (toto, '\0', sizeof(toto));
3
Hyperpenguin Messages postés 16 Date d'inscription mercredi 23 avril 2008 Statut Membre Dernière intervention 30 juillet 2009
30 juil. 2009 à 16:36
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!
0
Rejoignez-nous