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 :

Obtenir nombre de lignes d'un fichier texte


Sujet :

C++

  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Obtenir nombre de lignes d'un fichier texte
    Bonjour,

    Est-il possible d'obtenir le nombre de lignes d'un fichier texte sans avoir à le parcours ligne par ligne et incrémenter le compteur mais plutôt à la manière d'un Quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ifstream inputFile("file.txt");
    if(inputFile.is_open())
    {
      totalNumberLines = .....; // je cherche la fonction qui pourrait me renvoyer cela
    }

    Merci de votre aide.


    EDIT: j'ai trouvé ça, j'essaye et je vous tiens au courant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::count(std::istreambuf_iterator<char>(inFile), 
                 std::istreambuf_iterator<char>(), '\n');

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu sais que wc execute effectivement un parcours du fichier?

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Oui, mais je me suis mal exprimé.

    Je voulais un truc compact et leger et éviter un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(getline(..., ...))
    {
      ++i;
    }
    EDIT:
    Car je vais devoir remettre manuellement le curseur au debut du fichier.
    D'ailleurs faut que je le fasse, tu connais une manière simple de le faire (genre fseek) ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Dans ce cas, ta solution (std::count) m'as l'air d'un bon choix.

  5. #5
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Oui mais ça n'évite pas le fait que je dois revenir au debut du fichier si je veux pourvoir le lire à nouveau, comment je pourrais le faire simplement?

    EDIT: j'ai le choix entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    inputFile.clear();
    inputFile.seekg(0, ios::beg)
    et
    Une préference?

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    seekg()

    Sinon, std::count() peut induire en erreur si la dernière ligne n'est pas ponctuée d'un '\n'. Elle manquera au comptage dans ce cas.

  7. #7
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    OK, merci de votre aide.

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le seekg positionne le pointeur de lecture
    Le clear efface les indications d'erreur du flux. Si on a rencontré un problème, tant qu'il n'y a pas eu appel à clear, toutes les opérations de flux deviennent désactivées.

    Ici, la première lecture va lire le fichier jusqu'au bout, jusqu'à rencontrer un échec de lecture. Donc, pour moi, si on ne fait pas clear, on va avoir des soucis pour lire d'autres choses par la suite.

    Maintenant, on peut se poser la question de l'intérêt de lire le nombre de lignes dans le vide, sans en profiter pour lire le contenu lui aussi, surtout si on veut continuer à travailler avec le flux par la suite...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Le seekg positionne le pointeur de lecture
    Le clear efface les indications d'erreur du flux. Si on a rencontré un problème, tant qu'il n'y a pas eu appel à clear, toutes les opérations de flux deviennent désactivées.

    Ici, la première lecture va lire le fichier jusqu'au bout, jusqu'à rencontrer un échec de lecture. Donc, pour moi, si on ne fait pas clear, on va avoir des soucis pour lire d'autres choses par la suite.
    seekg efface eofbit (mais pas les autres indicateurs).

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Ah, d'accord, merci, j'ignorais ça !
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Calcul du nombre de lignes dans un fichier texte en JavaScript
    Par developppez dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/08/2017, 08h13
  2. Réponses: 13
    Dernier message: 09/01/2008, 13h02
  3. nombre de ligne d'un fichier texte
    Par mrtatou dans le forum C
    Réponses: 20
    Dernier message: 25/01/2006, 13h55
  4. [Fichier] Nombre de ligne dans un fichier texte
    Par NewSer dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2004, 16h58
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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