Utilisation de tellg() [Résolu]

Messages postés
8
Date d'inscription
mardi 12 mars 2002
Statut
Membre
Dernière intervention
11 mars 2011
- - Dernière réponse : cs_Ferdi
Messages postés
8
Date d'inscription
mardi 12 mars 2002
Statut
Membre
Dernière intervention
11 mars 2011
- 11 mars 2011 à 21:00
Bonjour

Je vous demanderai d'être indulgent car je suis débutant.
Mon bout de programme est à la fin de ce message. Il ne sert qu'à essayer de me faire comprendre comment tout ça se goupille.
Voici mon problème. J'aimerai connaitre la position du curseur quand je lis, dans un fichier texte, les mots qui constituent ce fichier texte.
J'utilise pour cela tellg(). Lorsque je l'utilise tel qu'il figure dans le programme, la lecture des mots se fait n'importe comment. Je trouve des fins de mot, d'autres sont oubliés, etc... Mais lorsque j'exécute ce même programme sans la ligne où je demande d'écrire la variable "aPositCurseur", la lecture des mots du fichier se fait tout à fait correctement.
Qu'est ce que j'ai bien pu oublier ?
Pouvez vous m'aider ?
j'attends vos réponse avec impatience.


==========================================================

#include
#include <fstream>
#include <string>
using namespace std;

int main()
{
ifstream ancienFichier;
ancienFichier.open("D:/Programmation/Coordonnees_SP2_Automatise.txt");

int aPositCurseur(0); // position du curseur
int compteur(0); // compteur
string mot("mot"); // mot lu

if(ancienFichier)
{
cout << "Ecriture du fichier lu :" << endl;
cout << endl;

while(ancienFichier)
{
compteur++;
aPositCurseur = ancienFichier.tellg();
ancienFichier >> mot;

cout << "Le mot est " << mot << " ";
cout << "La position du curseur est : " << aPositCurseur << " ; " << "A cette endroit le mot est " << mot << endl;
cout << " => C'est le mot num""\x82""ro : " << compteur << " ; " << endl;
cout << endl;
}
}
else
{
cout << "ERREUR: Impossible d'ouvrir un le fichier." << endl;
}
ancienFichier.close(); // ferme le fichier décortiqué
return 0;
}


Ferdinandhttp://lymbe.free.fr/index.htm
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
3
Merci
Avec le code que j'ai posté, et avec le fichier que tu m'as donné, j'obtiens exactement ta 2ème sortie.
C'est-à-dire qu'il n'y a pas de souci.

Je compile avec "g++ (GCC) 4.1.2 20080704", sous Linux.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
0
Merci
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Pas de besoin de <string> il est déjà dans

J'ai repris ton programme, et je n'ai aucun soucis. Il va falloir que tu postes ton code qui pose problème pour que je puisse t'aider.
#include 
#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;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
8
Date d'inscription
mardi 12 mars 2002
Statut
Membre
Dernière intervention
11 mars 2011
0
Merci
Merci de ta réponse.
Excuse moi pour l'utilisation de "using namespace" je n'ai lu ton lien qu'après avoir posté. De plus, je crois que comme beaucoup j'utilise cette instruction car c'est ce qu'on nous dit de faire dans les différents tutaux de la toile.

Qu'est ce que tu entends par mon code qui pose problème ?
Tu veux que j'envoie le résultat de la compilation, c'est-à-dire le .o ou le .exe ?


Ferdinandhttp://lymbe.free.fr/index.htm
Commenter la réponse de cs_Ferdi
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
0
Merci
Tu dis avoir un autre code source qui pose problème. C'est celui ci dont j'ai besoin pour analyser ton souci.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
8
Date d'inscription
mardi 12 mars 2002
Statut
Membre
Dernière intervention
11 mars 2011
0
Merci
Ah, non, non.
C'est avec le source fourni dans mon premier post que j'ai ce problème de ne pas retrouver les mots du fichier texte quand j'utilise la ligne de programme [aPositCurseur = ancienFichier.tellg();] et quand je n'utilise pas cette ligne je retrouve bien tous les mots contenus dans mon fichier texte mais, évidemment, je n'ai pas la position du pointeur. Je me demandais, de ce fait, si il y avait une corrélation quelconque entre tellg et (cout << mot).

J'ai testé le programme corrigé par tes soins qui, soit dit en passant, est plus compréhensible quant à l'appellation programmation objet mais avec lequel j'ai exactement le même inconvénient. D'où cela peut il provenir ?

J'utilise Code::Blocks comme compilateur. Ce pourrait il que le problème vienne de lui ?

Pendant que j'y suis tu me dis que [- Pas de besoin de <string> il est déjà dans ]. D'où la question suivante: Où puis trouver le contenu des librairies standards et la description de chaque fonction ? en français ci possible.

Ferdinandhttp://lymbe.free.fr/index.htm
Commenter la réponse de cs_Ferdi
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
0
Merci
Réponse courte:
http://www.cplusplus.com/reference/

Je n'ai pas de souci particulier. Tu peux m'envoyer ton fichier texte de test, ainsi que la sortie exacte que tu as quand tu lances ton programme ? Je vais comparer avec mon compilateur.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
8
Date d'inscription
mardi 12 mars 2002
Statut
Membre
Dernière intervention
11 mars 2011
0
Merci
Alors je ne sais pas trop comment envoyer tout ça donc j'essaye un truc et vous m'excusez si il ne faut pas faire comme ça.

Voici le fichier texte de test:
65:30:10 - Bharanak

    * 85:81:13 - Home
    * 82:81:10 - Haboroc
    * 85:63:11 - Nicogamu
    * 71:50:12 - Kanevib
    * 53:42:10 - Mogesu
    * 35:34:10 - Filukun
    * 17:30:06 - Fonutrub
    * 24:78:10 - Ahepreg
    * 65:30:10 - Bharanak
    * 82:15:10 - Nomocotek

Vous avezmessage(s) non lu(s)
Canon à ions (1) sur 17:30:6 terminé
Canon à ions (1) sur 82:15:10 terminé
Phalange laser (1) sur 17:30:6 terminé
Mine de métal (7) sur 65:30:10 terminé
Canon à ions (1) sur 35:34:10 terminé
Phalange laser (1) sur 82:15:10 terminé
Temps serveur mercredi 9 mars 2011 11:49:33


Et sur la console j'obtiens ça (avec [aPositCurseur = ancienFichier.tellg();]):

Ecriture du fichier lu :

Le mot est "65:30:10"
La position du curseur est: 0
A cette endroit le mot est "65:30:10"
 => C'est le mot numéro : 1

Le mot est "*"
La position du curseur est: 26
A cette endroit le mot est "*"
 => C'est le mot numéro : 2

Le mot est "*"
La position du curseur est: 45
A cette endroit le mot est "*"
 => C'est le mot numéro : 3

Le mot est "oc"
La position du curseur est: 68
A cette endroit le mot est "oc"
 => C'est le mot numéro : 4

Le mot est "-"
La position du curseur est: 87
A cette endroit le mot est "-"
 => C'est le mot numéro : 5

Le mot est "71:50:12"
La position du curseur est: 105
A cette endroit le mot est "71:50:12"
 => C'est le mot numéro : 6

Le mot est "*"
La position du curseur est: 129
A cette endroit le mot est "*"
 => C'est le mot numéro : 7

Le mot est "esu"
La position du curseur est: 145
A cette endroit le mot est "esu"
 => C'est le mot numéro : 8

Le mot est "0"
La position du curseur est: 163
A cette endroit le mot est "0"
 => C'est le mot numéro : 9

Le mot est "*"
La position du curseur est: 178
A cette endroit le mot est "*"
 => C'est le mot numéro : 10

Le mot est "onutrub"
La position du curseur est: 194
A cette endroit le mot est "onutrub"
 => C'est le mot numéro : 11

Le mot est ":10"
La position du curseur est: 214
A cette endroit le mot est ":10"
 => C'est le mot numéro : 12

Le mot est "*"
La position du curseur est: 229
A cette endroit le mot est "*"
 => C'est le mot numéro : 13

Le mot est "Bharanak"
La position du curseur est: 245
A cette endroit le mot est "Bharanak"
 => C'est le mot numéro : 14

Le mot est "15:10"
La position du curseur est: 265
A cette endroit le mot est "15:10"
 => C'est le mot numéro : 15

Le mot est "ek"
La position du curseur est: 280
A cette endroit le mot est "ek"
 => C'est le mot numéro : 16

Le mot est "vezmessage(s)"
La position du curseur est: 292
A cette endroit le mot est "vezmessage(s)"
 => C'est le mot numéro : 17

Le mot est "s)"
La position du curseur est: 313
A cette endroit le mot est "s)"
 => C'est le mot numéro : 18

Le mot est "Ó"
La position du curseur est: 323
A cette endroit le mot est "Ó"
 => C'est le mot numéro : 19

Le mot est "1)"
La position du curseur est: 331
A cette endroit le mot est "1)"
 => C'est le mot numéro : 20

Le mot est ":30:6"
La position du curseur est: 340
A cette endroit le mot est ":30:6"
 => C'est le mot numéro : 21

Le mot est "Ú"
La position du curseur est: 352
A cette endroit le mot est "Ú"
 => C'est le mot numéro : 22

Le mot est "Ó"
La position du curseur est: 360
A cette endroit le mot est "Ó"
 => C'est le mot numéro : 23

Le mot est "(1)"
La position du curseur est: 368
A cette endroit le mot est "(1)"
 => C'est le mot numéro : 24

Le mot est "2:15:10"
La position du curseur est: 377
A cette endroit le mot est "2:15:10"
 => C'est le mot numéro : 25

Le mot est "nÚ"
La position du curseur est: 390
A cette endroit le mot est "nÚ"
 => C'est le mot numéro : 26

Le mot est "ange"
La position du curseur est: 398
A cette endroit le mot est "ange"
 => C'est le mot numéro : 27

Le mot est "r"
La position du curseur est: 407
A cette endroit le mot est "r"
 => C'est le mot numéro : 28

Le mot est "sur"
La position du curseur est: 413
A cette endroit le mot est "sur"
 => C'est le mot numéro : 29

Le mot est "0:6"
La position du curseur est: 421
A cette endroit le mot est "0:6"
 => C'est le mot numéro : 30

Le mot est "inÚ"
La position du curseur est: 429
A cette endroit le mot est "inÚ"
 => C'est le mot numéro : 31

Le mot est "e"
La position du curseur est: 437
A cette endroit le mot est "e"
 => C'est le mot numéro : 32

Le mot est "mÚtal"
La position du curseur est: 442
A cette endroit le mot est "mÚtal"
 => C'est le mot numéro : 33

Le mot est "sur"
La position du curseur est: 451
A cette endroit le mot est "sur"
 => C'est le mot numéro : 34

Le mot est "30:10"
La position du curseur est: 459
A cette endroit le mot est "30:10"
 => C'est le mot numéro : 35

Le mot est "minÚ"
La position du curseur est: 468
A cette endroit le mot est "minÚ"
 => C'est le mot numéro : 36

Le mot est "non"
La position du curseur est: 476
A cette endroit le mot est "non"
 => C'est le mot numéro : 37

Le mot est "ions"
La position du curseur est: 482
A cette endroit le mot est "ions"
 => C'est le mot numéro : 38

Le mot est ")"
La position du curseur est: 489
A cette endroit le mot est ")"
 => C'est le mot numéro : 39

Le mot est "r"
La position du curseur est: 493
A cette endroit le mot est "r"
 => C'est le mot numéro : 40

Le mot est ":34:10"
La position du curseur est: 497
A cette endroit le mot est ":34:10"
 => C'est le mot numéro : 41

Le mot est "rminÚ"
La position du curseur est: 506
A cette endroit le mot est "rminÚ"
 => C'est le mot numéro : 42

Le mot est "halange"
La position du curseur est: 514
A cette endroit le mot est "halange"
 => C'est le mot numéro : 43

Le mot est "aser"
La position du curseur est: 523
A cette endroit le mot est "aser"
 => C'est le mot numéro : 44

Le mot est "1)"
La position du curseur est: 529
A cette endroit le mot est "1)"
 => C'est le mot numéro : 45

Le mot est "ur"
La position du curseur est: 533
A cette endroit le mot est "ur"
 => C'est le mot numéro : 46

Le mot est "2:15:10"
La position du curseur est: 537
A cette endroit le mot est "2:15:10"
 => C'est le mot numéro : 47

Le mot est "erminÚ"
La position du curseur est: 546
A cette endroit le mot est "erminÚ"
 => C'est le mot numéro : 48

Le mot est "Temps"
La position du curseur est: 554
A cette endroit le mot est "Temps"
 => C'est le mot numéro : 49

Le mot est "serveur"
La position du curseur est: 560
A cette endroit le mot est "serveur"
 => C'est le mot numéro : 50

Le mot est "mercredi"
La position du curseur est: 568
A cette endroit le mot est "mercredi"
 => C'est le mot numéro : 51

Le mot est "9"
La position du curseur est: 577
A cette endroit le mot est "9"
 => C'est le mot numéro : 52

Le mot est "mars"
La position du curseur est: 579
A cette endroit le mot est "mars"
 => C'est le mot numéro : 53

Le mot est "2011"
La position du curseur est: 584
A cette endroit le mot est "2011"
 => C'est le mot numéro : 54

Le mot est "11:49:33"
La position du curseur est: 589
A cette endroit le mot est "11:49:33"
 => C'est le mot numéro : 55


Process returned 0 (0x0)   execution time : 0.256 s
Press any key to continue.


Et j'obtiens ça (sans [aPositCurseur = ancienFichier.tellg();])

Le mot est "*"
La position du curseur est: 0
A cette endroit le mot est "*"
 => C'est le mot numéro : 36

Le mot est "65:30:10"
La position du curseur est: 0
A cette endroit le mot est "65:30:10"
 => C'est le mot numéro : 37

Le mot est "-"
La position du curseur est: 0
A cette endroit le mot est "-"
 => C'est le mot numéro : 38

Le mot est "Bharanak"
La position du curseur est: 0
A cette endroit le mot est "Bharanak"
 => C'est le mot numéro : 39

Le mot est "*"
La position du curseur est: 0
A cette endroit le mot est "*"
 => C'est le mot numéro : 40

Le mot est "82:15:10"
La position du curseur est: 0
A cette endroit le mot est "82:15:10"
 => C'est le mot numéro : 41

Le mot est "-"
La position du curseur est: 0
A cette endroit le mot est "-"
 => C'est le mot numéro : 42

Le mot est "Nomocotek"
La position du curseur est: 0
A cette endroit le mot est "Nomocotek"
 => C'est le mot numéro : 43

Le mot est "Vous"
La position du curseur est: 0
A cette endroit le mot est "Vous"
 => C'est le mot numéro : 44

Le mot est "avezmessage(s)"
La position du curseur est: 0
A cette endroit le mot est "avezmessage(s)"
 => C'est le mot numéro : 45

Le mot est "non"
La position du curseur est: 0
A cette endroit le mot est "non"
 => C'est le mot numéro : 46

Le mot est "lu(s)"
La position du curseur est: 0
A cette endroit le mot est "lu(s)"
 => C'est le mot numéro : 47

Le mot est "Canon"
La position du curseur est: 0
A cette endroit le mot est "Canon"
 => C'est le mot numéro : 48

Le mot est "Ó"
La position du curseur est: 0
A cette endroit le mot est "Ó"
 => C'est le mot numéro : 49

Le mot est "ions"
La position du curseur est: 0
A cette endroit le mot est "ions"
 => C'est le mot numéro : 50

Le mot est "(1)"
La position du curseur est: 0
A cette endroit le mot est "(1)"
 => C'est le mot numéro : 51

Le mot est "sur"
La position du curseur est: 0
A cette endroit le mot est "sur"
 => C'est le mot numéro : 52

Le mot est "17:30:6"
La position du curseur est: 0
A cette endroit le mot est "17:30:6"
 => C'est le mot numéro : 53

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

Le mot est "Canon"
La position du curseur est: 0
A cette endroit le mot est "Canon"
 => C'est le mot numéro : 55

Le mot est "Ó"
La position du curseur est: 0
A cette endroit le mot est "Ó"
 => C'est le mot numéro : 56

Le mot est "ions"
La position du curseur est: 0
A cette endroit le mot est "ions"
 => C'est le mot numéro : 57

Le mot est "(1)"
La position du curseur est: 0
A cette endroit le mot est "(1)"
 => C'est le mot numéro : 58

Le mot est "sur"
La position du curseur est: 0
A cette endroit le mot est "sur"
 => C'est le mot numéro : 59

Le mot est "82:15:10"
La position du curseur est: 0
A cette endroit le mot est "82:15:10"
 => C'est le mot numéro : 60

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

Le mot est "Phalange"
La position du curseur est: 0
A cette endroit le mot est "Phalange"
 => C'est le mot numéro : 62

Le mot est "laser"
La position du curseur est: 0
A cette endroit le mot est "laser"
 => C'est le mot numéro : 63

Le mot est "(1)"
La position du curseur est: 0
A cette endroit le mot est "(1)"
 => C'est le mot numéro : 64

Le mot est "sur"
La position du curseur est: 0
A cette endroit le mot est "sur"
 => C'est le mot numéro : 65

Le mot est "17:30:6"
La position du curseur est: 0
A cette endroit le mot est "17:30:6"
 => C'est le mot numéro : 66

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

Le mot est "Mine"
La position du curseur est: 0
A cette endroit le mot est "Mine"
 => C'est le mot numéro : 68

Le mot est "de"
La position du curseur est: 0
A cette endroit le mot est "de"
 => C'est le mot numéro : 69

Le mot est "mÚtal"
La position du curseur est: 0
A cette endroit le mot est "mÚtal"
 => C'est le mot numéro : 70

Le mot est "(7)"
La position du curseur est: 0
A cette endroit le mot est "(7)"
 => C'est le mot numéro : 71

Le mot est "sur"
La position du curseur est: 0
A cette endroit le mot est "sur"
 => C'est le mot numéro : 72

Le mot est "65:30:10"
La position du curseur est: 0
A cette endroit le mot est "65:30:10"
 => C'est le mot numéro : 73

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

Le mot est "Canon"
La position du curseur est: 0
A cette endroit le mot est "Canon"
 => C'est le mot numéro : 75

Le mot est "Ó"
La position du curseur est: 0
A cette endroit le mot est "Ó"
 => C'est le mot numéro : 76

Le mot est "ions"
La position du curseur est: 0
A cette endroit le mot est "ions"
 => C'est le mot numéro : 77

Le mot est "(1)"
La position du curseur est: 0
A cette endroit le mot est "(1)"
 => C'est le mot numéro : 78

Le mot est "sur"
La position du curseur est: 0
A cette endroit le mot est "sur"
 => C'est le mot numéro : 79

Le mot est "35:34:10"
La position du curseur est: 0
A cette endroit le mot est "35:34:10"
 => C'est le mot numéro : 80

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

Le mot est "Phalange"
La position du curseur est: 0
A cette endroit le mot est "Phalange"
 => C'est le mot numéro : 82

Le mot est "laser"
La position du curseur est: 0
A cette endroit le mot est "laser"
 => C'est le mot numéro : 83

Le mot est "(1)"
La position du curseur est: 0
A cette endroit le mot est "(1)"
 => C'est le mot numéro : 84

Le mot est "sur"
La position du curseur est: 0
A cette endroit le mot est "sur"
 => C'est le mot numéro : 85

Le mot est "82:15:10"
La position du curseur est: 0
A cette endroit le mot est "82:15:10"
 => C'est le mot numéro : 86

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

Le mot est "Temps"
La position du curseur est: 0
A cette endroit le mot est "Temps"
 => C'est le mot numéro : 88

Le mot est "serveur"
La position du curseur est: 0
A cette endroit le mot est "serveur"
 => C'est le mot numéro : 89

Le mot est "mercredi"
La position du curseur est: 0
A cette endroit le mot est "mercredi"
 => C'est le mot numéro : 90

Le mot est "9"
La position du curseur est: 0
A cette endroit le mot est "9"
 => C'est le mot numéro : 91

Le mot est "mars"
La position du curseur est: 0
A cette endroit le mot est "mars"
 => C'est le mot numéro : 92

Le mot est "2011"
La position du curseur est: 0
A cette endroit le mot est "2011"
 => C'est le mot numéro : 93

Le mot est "11:49:33"
La position du curseur est: 0
A cette endroit le mot est "11:49:33"
 => C'est le mot numéro : 94


Process returned 0 (0x0)   execution time : 0.366 s
Press any key to continue.




Ferdinandhttp://lymbe.free.fr/index.htm
Commenter la réponse de cs_Ferdi
Messages postés
8
Date d'inscription
mardi 12 mars 2002
Statut
Membre
Dernière intervention
11 mars 2011
0
Merci
Donc on peut en déduire que le compilateur et/ou le système d'exploitation pose problème.

Merci

Ferdinandhttp://lymbe.free.fr/index.htm
Commenter la réponse de cs_Ferdi