Lire un fichier texte et mettre les donnees dans un tableau [Résolu]

Signaler
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007
-
rrk275
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
-
Bonjour a tous,
Je suis un debutant en c et j'aimerai bien arrive a résoudre mon probleme.

Voila mon probleme, j'aimerai lire un fichier texte qui a un format du genre:

0 192.168.0.4 192.168.000.004 5B64 0.00
1 192.168.0.5 192.168.000.005 4B64 2.25

et voila comment je le lit :

if (fpeer != NULL)

{

i = 0;

while (i<100 && fscanf(fpeer,"%c %s %s %s %s", listpeer[i].etat, listpeer[i].peername, listpeer[i].peerip, listpeer[i].peerid, listpeer[i].peerver)!=EOF)

i++;

}

fclose(fpeer);

Voila le probleme est qu'il me lit les donnees comme cela
0192.168.0.4
192.168.0.4
192.168.000.004
5B640.00
0.00
(j'ai mis juste le premier record comme exemple) mais on voit que pour le premier champ il me lit 0192.168.0.4 a la place de 0 et la meme chose pour le 4 eme champ il lit 5B640.00 a la place de 5B64.
Je dois dire que je cherche depuis quelque heures le pourquoi du comment.

Donc si quelqu'un pourrait m'aider ce serait vraiment sympa.

Merci et a+

Rene

12 réponses

Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
tu  as oublier d'inclure le caractere null dans ta struct

char etat[1], peername[256], peerip[256], peerid[4+1], peerver[5+1];

donc l'orsque tu affihes ton peerid il ne trouveras pas le /0 donc va continuer de lire ta memoire et il doit surement lire ton peever
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
C'est '0' pas "0" et  *listpeer[y].etat pas
listpeer[y].etat
Messages postés
240
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
22 mars 2009

Salut,

pourquoi ne pas ouvrire le fichier en createfile, tu lit tout le fichier et tu traite le résultat (tableau char) directement sn statique ?? c'est plus simple, plus efficace, plus lisible ...

ciao et bon codage.
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007

Merci pour ta reponse, je n'ai pas vraiment compris ta reponse, tu n'aurais pas un petit exemple.

Merci pour ton aide.

a+

Rene
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
Non tu peux lire comme ca c'est juste qu'il doit y avoir un probleme,
peut on avoir la structure de listpeer  parce que il y a je crois un bug avec la lecture
mais ca depend de la structure .

.:| Louis |:.
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007

Merci pour ta reponse.

Voila la structure:

struct speer

{

char etat[1], peername[256], peerip[256], peerid[4], peerver[5];

};

struct speer listpeer[100];

Merci a+

Rene
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
  if (fpeer != NULL)
    {
      int i = 0;
      while (i<100 && fscanf(fpeer,"%c %s %s %s %s", listpeer[i].etat, listpeer[i].peername, listpeer[i].peerip, listpeer[i].peerid, listpeer[i].peerver)!=EOF)
    i++;  
      i = 0 ;
      printf("%c %s %s %s %s\n", *listpeer[i].etat, listpeer[i].peername, listpeer[i].peerip, listpeer[i].peerid, listpeer[i].peerver ) ;
    }
 

m'affiche bien :

louis@chambre:~$ ./a.out
0 192.168.0.4 192.168.000.004 5B640.00 0.00

rrk275
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007

Regarde la fin de la ligne le 5B640.00 0.00 cela devrait etre 5B64 0.00 seulement.

Merci a+

Rene
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Regarde dans les sources que j'ai déposer sur ce site, tu trouveras "exactement" ce que tu cherches.

Shell
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007

Merci pour ta reponse, mais etant nouveau sur le site, je trouve ou ces sources.

Merci a+

Rene
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007

Tres juste,que je suis bete, si simple.

Merci bien pour ton aide.

a+

Rene
Messages postés
7
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
1 octobre 2007

Bonjour c'est denouveau moi, je suis denouveau bloque pour la suite (desole c'est mes debuts)

maintenant que j'arrive bien a lire mon fichier, j'aimerai faire des controle dans ma structure et j'y arrive pas, cela ne me donne pas le bon resultat.

Je reposte ma structure etc.. et mon controle que j'aimerai faire.

FILE * fpeer;

fpeer = fopen(ficpeer, "r");

struct speer

{

char etat[1], peername[256], peerip[256], peerid[4], peerver[5];

};

struct speer listpeer[100];

int i, y, voff, von;

voff = 0;

von = 0;

//test si le fihcier share.onl est present

if (fpeer != NULL)

{

i = 0;

while (i<100 && fscanf(fpeer,"%c %s %s %s %s", listpeer[i].etat, listpeer[i].peername, listpeer[i].peerip, listpeer[i].peerid, listpeer[i].peerver)!=EOF)

i++;

}

fclose(fpeer);

for (y = 0; y < i; y++)

{

if (listpeer[y].etat == "0")  c'est ici qu'il y a le probleme, j'ai essaye avec '0' mais le compilateur me fait une erreur de pointer :-( 

voff++;

else

von++;

}

Merci pour votre aide

a+ Rene