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 :

[C] lecture des n lignes d'un fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut [C] lecture des n lignes d'un fichier
    Bonjour,

    Je voulais savoir comment affichier les i premières lignes d'un fichier...
    pour lire tout le fichier et puis afficher son contenu j'utilise la boucle mais je vois pas comment faire pour changer la condition d'arret de la boucle while,afin de lire que les i premieres lignes..

    merci bien
    et bonne journée à tous et à toutes !!

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je voulais savoir comment affichier les i premières lignes d'un fichier...
    pour lire tout le fichier et puis afficher son contenu j'utilise la boucle
    Pourquoi ne pas faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int cnt=0;
     
    <ouverture du fichier>
    while((cnt<i) && (!feof(fichier)))
    {
     ...
     cnt++;
    }
    Jc

  3. #3
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ben il suffit de les compter !!!

    En gros ta condition d'arrêt sera composée, d'un codé tu t'arrête en fin de fichier comme tu as fait, et en plus tu rajoute une condition lorsque tu as lu le nombre nécessaire de ligne.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [C] lecture des n lignes d'un fichier
    Citation Envoyé par felicity
    Je voulais savoir comment affichier les i premières lignes d'un fichier...
    pour lire tout le fichier et puis afficher son contenu j'utilise la boucle
    Pas bon. Il faut tester la valeur retournée par la fonction de lecture.

    http://emmanuel-delahaye.developpez....s.htm#fichiers

    mais je vois pas comment faire pour changer la condition d'arret de la boucle while,afin de lire que les i premieres lignes..
    Lire ligne par ligne, compter les lignes, tester...

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut Un bout de code...
    ... qui en dit long
    Voilà, je modifie juste l'exemple qui t'a été proposé.

    Bonne chance avec le C

    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
    17
    18
    19
    20
    /* Déclarations. */
    int    cnt;
    char * ligne;
     
    /* Initialiations. */
    ligne = NULL;
    cnt   = 0;
     
    /* ouverture du fichier. */
    while((cnt<i) && (!feof(fichier)))
    {
     /* Récupère dans la variable ligne les 1023 premiers caractères OU
     la ligne terminant par un retour charriot (\n).
     */
     fgets(ligne, 1024, fichier);
     
     /* Tes traitements ............... */
     
     cnt++;
    }

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Un bout de code...
    Citation Envoyé par AlBoLeToNo
    while((cnt<i) && (!feof(fichier)))
    NON!

  7. #7
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    La "bonne" méthode pour lire les n premières lignes du fichier est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    i = 0;
    while (i < n && fgets(buf, sizeof(buf), fic) != NULL)
    {
        // on travaille avec la ligne i
        // en particulier on teste la présence de '\n' pour être sûr
        // d'avoir lu une ligne complète
        i++;
    }

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Oui, enfin, "la" bonne méthode n'existe pas.

    Toutes les méthodes précédentes marchent, mais chacun "sa" méthode.
    Une d'ailleurs que je n'aime pas figure sur les MSDN (hé oui !).
    C'est à dire un beau break dans un while si le gets retourne NULL

    Ma méthode préférée, c'est celle de trap d (que je fais d'ailleurs surtout en java ).

    Donc voilà, j'espère que tu ne seras pas trop perdu par la réponse de chacun :

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par AlBoLeToNo
    Oui, enfin, "la" bonne méthode n'existe pas.
    En tout cas, cette méthode est bonne, contrairement aux autres.
    Toutes les méthodes précédentes marchent, mais chacun "sa" méthode.
    Non. feof() ne fait pas ce que tu crois. Relis la doc de feof().

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Après relecture du feof, j'aimerais, si quelqu'un a le temps, qu'on m'explique pourquoi la solution avec feof n'est pas bonne.

  11. #11
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par AlBoLeToNo
    Après relecture du feof, j'aimerais, si tu as le temps, que quelqu'un m'explique pourquoi la solution avec feof n'est pas bonne.

    Il y a principalement deux raisons :
    * feof() n'indique que la fin de fichier est atteinte que lorsqu'une erreur de lecture pour cause de fin de fichier a eu lieu. Avec l'exemple fournit utilisant feof() on va parcourir la boucle une fois de trop (et la derniere ligne semble etre lue deux fois).
    * si la lecture echoue pour une raison autre que la fin de fichier, feof() ne l'indique pas, les lectures continuent a echouer, la fin n'est jamais atteinte et le programme part en boucle infinie.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par AlBoLeToNo
    Après relecture du feof, j'aimerais, si quelqu'un a le temps, qu'on m'explique pourquoi la solution avec feof n'est pas bonne.
    http://emmanuel-delahaye.developpez....s.htm#fichiers

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Ah, okay, merci de vos réponses éclairées.
    Effectivement, ça ne doit pas marcher tout le temps alors (selon les retours de lecture).

    Encore merci.

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

Discussions similaires

  1. lecture de quelques lignes d'un fichier en C++
    Par barose dans le forum Dev-C++
    Réponses: 1
    Dernier message: 12/05/2010, 13h51
  2. Lecture des caracteres à partir d'un fichier
    Par benooo dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 23/01/2009, 21h28
  3. Réponses: 1
    Dernier message: 26/09/2007, 19h55
  4. Réponses: 5
    Dernier message: 15/11/2006, 11h43
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

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