Lire un fichier texte et mettre les donnees dans un tableau

Résolu
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007 - 28 sept. 2007 à 14:24
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 - 1 oct. 2007 à 12:01
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

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
28 sept. 2007 à 23:24
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
3
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
1 oct. 2007 à 12:01
C'est '0' pas "0" et  *listpeer[y].etat pas
listpeer[y].etat
3
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
28 sept. 2007 à 16:10
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.
0
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007
28 sept. 2007 à 16:24
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
28 sept. 2007 à 16:34
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 |:.
0
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007
28 sept. 2007 à 16:38
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
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
28 sept. 2007 à 16:47
  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
0
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007
28 sept. 2007 à 16:59
Regarde la fin de la ligne le 5B640.00 0.00 cela devrait etre 5B64 0.00 seulement.

Merci a+

Rene
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
28 sept. 2007 à 17:24
Regarde dans les sources que j'ai déposer sur ce site, tu trouveras "exactement" ce que tu cherches.

Shell
0
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007
28 sept. 2007 à 17:39
Merci pour ta reponse, mais etant nouveau sur le site, je trouve ou ces sources.

Merci a+

Rene
0
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007
29 sept. 2007 à 07:06
Tres juste,que je suis bete, si simple.

Merci bien pour ton aide.

a+

Rene
0
t047554 Messages postés 7 Date d'inscription vendredi 28 septembre 2007 Statut Membre Dernière intervention 1 octobre 2007
1 oct. 2007 à 10:11
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
0
Rejoignez-nous