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 :

Probleme curseur fichier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Par défaut Probleme curseur fichier
    Bonjour à tous,
    J'ai l'impression (enfin plus que l'impression vu que sa marche pas ) que mon code a un probleme au niveau de la remise du curseur (je travaille avec un fichier) ne se fait pas correctement pourtant j'ai chercher "partout" et c'est "correct".
    Voici mon code
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <iostream>
    #include <fstream>
    #include <string>
    #include "gestionfichier.h"
    
    using namespace std;
    
    long verbesAleatoire(Verbes &verbes)
    {
        //Declaration des variables
        ifstream fichier;
        char caractereLu = 0;
        long nombreMax = 0, numVerbe = 0;
    
        //On ouvre et on test l'ouverture du fichier
        fichier.open("verbes", ios::in);
        if(!fichier)
        {
            cout << "Ouverture du fichier impossible" << endl;
    	    exit(0);
        }
    
        //On compte le verbes et on en choisie un au hasard et on replace le curseur au debut
        string ligne;
        while(getline(fichier, ligne))
        {
            nombreMax++;
            cout << fichier.tellg() << endl;
        }
        numVerbe = rand() % nombreMax;
        fichier.seekg(0, ios::beg);
        cout << "Tellg : " << fichier.tellg() << " nombreMax : " << nombreMax << endl;
    
        //for(long i = 0; i < numVerbe; i++)
        //{
            //fichier >> verbes.to >> verbes.past >> verbes.perfect >> verbes.fr;
        //}
        cout << "Line : " << ligne << endl;
    
    	fichier.close();
    
    	return nombreMax;
    }

  2. #2
    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
    Question toute bête (désolé pour le vrai problème, mais je n'utilises quasiment jamais seekg... Peut-être est-ce lié au fait qu'à la fin de ta première lecture, ton fichier est en état d'erreur ?) : Pourquoi ne pas faire la lecture d'un seul bloc, plutôt que de relire deux fois, et stocker au fur et à mesure les informations dans un conteneur quelconque ?
    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.

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Par défaut
    Car comment savoir ou s'arreter sans connaitre le nombre de verbes (lignes).
    Et qu'entend tu par "ton fichier est en état d'erreur"?
    De plus dans le exemple que j'ai trouvé sur internet ils s'en servent et sa a l'air de marcher.

  4. #4
    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
    Citation Envoyé par Amybond
    Car comment savoir ou s'arreter sans connaitre le nombre de verbes (lignes).
    De la même façon dont tu t'arrêtes dans le code en question : Dès que getline retourne faux. L'idée est un code genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    vector<Verb> verbs;
    while(getline(fichier, ligne))
    {
      istringstream iss(ligne);
      Verb currentVerb;
      iss >> currentVerb.to >> currentVerb.past >> currentVerb.perfect >> currentVerb.fr;
      verbs.push_back(currentVerb);
    }
    Citation Envoyé par Amybond
    Et qu'entend tu par "ton fichier est en état d'erreur"?
    Par construction, tu arrêtes la première boucle dès que getline retourne faux, c'est à dire dès que ton flux est en état d'erreur, parce que tu as essayé de lire après la fin de flux. C'est tout à fait normal d'utiliser ça comme critère d'arrêt (je n'en connais pas vraiment d'autres).

    Sauf que maintenant, ton flux est en erreur. Et un bon paquet de fonctions ne font rien quand on les applique à un flux en erreur. Je ne suis pus certain pour seekg, mais je ne vois pas pourquoi elle aurait un comportement différent des autres. Pour enlever l'état d'erreur d'un flux, la fonction clear est ton amie.
    Citation Envoyé par Amybond
    De plus dans le exemple que j'ai trouvé sur internet ils s'en servent et sa a l'air de marcher.
    On trouve des exemples de plein de choses sur internet. Parfois, même, ils marchent. Dans l'exemple en question, avait-on lu le fichier jusqu'au bout ?
    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.

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 240
    Par défaut
    Je ne sais plus mais c'est bon j'ai reussi a le faire marcher grace a un petit
    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier.seekg(0, ios::beg)
    Merci a toi pour ton aide.
    Il ne me reste plus qu'a gerer la mise en variable du fichier.

Discussions similaires

  1. Réponses: 33
    Dernier message: 15/10/2004, 16h19
  2. [XSLT] Probleme de fichier passé en URL
    Par jean.lamy dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 07/05/2004, 17h48
  3. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53
  5. [LG]Problème de fichier
    Par Andy_24DB dans le forum Langage
    Réponses: 11
    Dernier message: 03/11/2003, 19h07

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