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 de position avec tellg()


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 24
    Points
    24
    Par défaut Problème de position avec tellg()
    Bonjour,

    Lorsque j'exécute le code suivant, j'ai des sorties erronées, vraisemblablement dues aux "et" :

    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
    #include <iostream>
    #include <fstream>
     
    int main()
    {
      std::ifstream ancienFichier("test.txt");
      int aPositCurseur = 0;
      int compteur = 0;
      std::string mot;
     
      if (!ancienFichier)
      {
        std::cerr << "ERREUR: Impossible d'ouvrir un le fichier." << std::endl;
        return 1;
      }
     
      std::cout << "Ecriture du fichier lu :" << std::endl << std::endl;
      while (ancienFichier)
      {
        ++compteur;
        aPositCurseur = ancienFichier.tellg();
        ancienFichier >> mot;
        if (!ancienFichier) // Évite d'avoir le dernier mot en double
          break;
     
        std::cout << "Le mot est \"" << mot << "\" " << std::endl
    	      << "La position du curseur est: " << aPositCurseur << std::endl
    	      << "A cette endroit le mot est \"" << mot << "\"" << std::endl
    	      << " => C'est le mot numéro : " << compteur << std::endl
    	      << std::endl;
      }
     
      ancienFichier.close();
     
    //  return 0;
     
          system("PAUSE");
        return EXIT_SUCCESS;
    }


    Ecriture du fichier lu :

    Le mot est "Olivier"
    La position du curseur est: 0
    A cette endroit le mot est "Olivier"
    => C'est le mot numÚro : 1

    Le mot est "Yvette"
    La position du curseur est: 11
    A cette endroit le mot est "Yvette"
    => C'est le mot numÚro : 2

    Le mot est "Patrick"
    La position du curseur est: 21
    A cette endroit le mot est "Patrick"
    => C'est le mot numÚro : 3

    Le mot est "t"
    La position du curseur est: 30
    A cette endroit le mot est "t"
    => C'est le mot numÚro : 4

    Le mot est "rÚlie"
    La position du curseur est: 33
    A cette endroit le mot est "rÚlie"
    => C'est le mot numÚro : 5

    Le mot est "Yann"
    La position du curseur est: 40
    A cette endroit le mot est "Yann"
    => C'est le mot numÚro : 6

    Le mot est "et"
    La position du curseur est: 46
    A cette endroit le mot est "et"
    => C'est le mot numÚro : 7

    Le mot est "catherine"
    La position du curseur est: 49
    A cette endroit le mot est "catherine"
    => C'est le mot numÚro : 8

    Appuyez sur une touche pour continuer...
    D'avance merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,

    Tu ferais mieux d'utiliser la fonction "getline" de la classe "string"!
    En suite, tu utilise les fonction de traitement de la classe "string" pour rechercher ce que tu cherches dans chaques lignes... ( comme par exemple les espaces " " ou les " et " dans ta ligne pour localiser les prénoms et les extraire grâce à la fonction "find" puis, en suite, à la fonction "substr" )...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Etant donné que les données sont dans un fichier, j'utilise getline de fstream :


    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>
     
     
    int main()
    {
      std::ifstream ancienFichier("test.txt");
      int aPositCurseur = 0;
      int compteur = 0;
      std::string mot;
     
      if (!ancienFichier)
      {
        std::cerr << "ERREUR: Impossible d'ouvrir un le fichier." << std::endl;
        return 1;
      }
     
      std::cout << "Ecriture du fichier lu :" << std::endl << std::endl;
      while (ancienFichier)
      {
        ++compteur;
        aPositCurseur = ancienFichier.tellg();
        //ancienFichier >> mot;
     
        getline(ancienFichier, mot);
     
        if (!ancienFichier) // Évite d'avoir le dernier mot en double
          break;
     
        std::cout << "Le mot est \"" << mot << "\" " << std::endl
    	      << "La position du curseur est: " << aPositCurseur << std::endl
    	      << "A cette endroit le mot est \"" << mot << "\"" << std::endl
    	      << " => C'est le mot numéro : " << compteur << std::endl
    	      << std::endl;
      }
     
      ancienFichier.close();
     
    //  return 0;
     
          system("PAUSE");
        return EXIT_SUCCESS;
    }

    Les données du fichiers sont :

    Olivier et Yvette
    Patrick et Orelie
    Yann et catherine

    Et j'obtiens un meilleur résultat mais avec un P manquant pour Patrick.

    Ecriture du fichier lu :

    Le mot est "Olivier et Yvette"
    La position du curseur est: 0
    A cette endroit le mot est "Olivier et Yvette"
    => C'est le mot numÚro : 1

    Le mot est "atrick et Orelie"
    La position du curseur est: 20
    A cette endroit le mot est "atrick et Orelie"
    => C'est le mot numÚro : 2

    Le mot est "Yann et catherine"
    La position du curseur est: 38
    A cette endroit le mot est "Yann et catherine"
    => C'est le mot numÚro : 3

    Appuyez sur une touche pour continuer...

Discussions similaires

  1. Problème avec tellg()
    Par Pifpafboum dans le forum C++
    Réponses: 5
    Dernier message: 16/03/2011, 18h03
  2. Problème de gestion de positions avec contraintes
    Par iGwendal dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/03/2010, 16h07
  3. problème de position avec full screen depuis un clip
    Par etienne_p dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/01/2010, 22h20
  4. Réponses: 2
    Dernier message: 01/10/2009, 17h31
  5. Problème de position:absolute avec IE
    Par Death83 dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/12/2006, 12h12

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