IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème: lecture dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut Problème: lecture dans un fichier
    Bonjour,
    je lis dans un fichier .txt grace à la fonction ci dessous seulement il me repete deux fois la derniere ligne. pkoi? et comment y remédier?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(!feof(Fd)) 
    	{
    		fscanf(Fd,"%d %d %s",&Date_Dbt,&Tps_proc,Nom);
    		printf("Date de soumission: %d, Temps processus: %d, Nom: %s \n",Date_Dbt,Tps_proc,Nom);
    	}
    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Par défaut
    t'aurais pas mis un printf apres ce code

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut
    ba juste 1 dans la boucle while pour afficher mes variables que je viens de lire. C'est pas juste?

  4. #4
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    salut,

    donnez nous plus de code pour qu'on puissnet t'aider !!!!!

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    On ne lit pas un fichier de cette façon, feof ne fait pas ce que tu penses ! (voir ici).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(fgets(buf, sizeof buf, Fd) != NULL) 
    	{
    		sscanf(buf,"%d %d %s",&Date_Dbt,&Tps_proc,Nom);
    		printf("Date de soumission: %d, Temps processus: %d, Nom: %s \n",Date_Dbt,Tps_proc,Nom);
    	}
    feof n'indique pas si la fin de fichier est atteinte, elle indique si la fin de fichier a été atteinte sur une erreur ou non, ce qui est très différent !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Citation Envoyé par Trap D Voir le message
    On ne lit pas un fichier de cette façon, feof ne fait pas ce que tu penses ! (voir ici).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(fgets(buf, sizeof buf, Fd) != NULL) 
    	{
    		sscanf(buf,"%d %d %s",&Date_Dbt,&Tps_proc,Nom);
    		printf("Date de soumission: %d, Temps processus: %d, Nom: %s \n",Date_Dbt,Tps_proc,Nom);
    	}
    feof n'indique pas si la fin de fichier est atteinte, elle indique si la fin de fichier a été atteinte sur une erreur ou non, ce qui est très différent !
    mais feof() permet de detecter si le flux pointé par la variable est sur le caractère FIN ou non, si non, elle retourne une valeur positif nonzero.... donc ça doit marcher aussi avec feof().....

    Mais le problème c'est que la fonction fscanf() ne permet pas d'avancer le pointeur sur le flux, alors il aura une boucle infinie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    sauf, s'il utilise une autre fonction, dans un autre endroit pour l'avancer.

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Par défaut
    Merci Trap D. la variable buf est de type char? je l'initialise comment?

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Tu déclares char buf[256] par exemple.
    En fait la taille du buffer est très difficile à déterminer en général car tu peux avoir n'importe quoi comme longueur de ligne texte.
    fgets permet de savoir si la ligne entière a été lue, car dans ce cas le '\n' qui signale la fin de le la ligne figure dans le buffer.
    La méthode classique de lecture est celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    while(fgets(buf, sizeof buf, Fd) != NULL) 
    {
      char *p = strchr(buf, '\n');
      if (p == NULL)
      {
        // c'est ici qu'il y a un problème, ton buffer est trop petit
        // a toi de voir ce que tu veux faire
      }
      else
      {
        // ici on est certain que toute la ligne a été lue
        sscanf(buf,"%d %d %s",&Date_Dbt,&Tps_proc,Nom);
        printf("Date de soumission: %d, Temps processus: %d, Nom: %s \n",Date_Dbt,Tps_proc,Nom);
      }
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème : lecture dans un fichier
    Par sakura.haruno dans le forum Débuter
    Réponses: 5
    Dernier message: 22/12/2007, 10h41
  2. Problème de lecture dans un fichier texte.
    Par Mike888 dans le forum C
    Réponses: 3
    Dernier message: 24/05/2007, 11h45
  3. problème de lecture dans un fichier
    Par phy4me dans le forum Fortran
    Réponses: 1
    Dernier message: 20/05/2007, 20h55
  4. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo