Utilisation de tellg()

Résolu
cs_Ferdi Messages postés 8 Date d'inscription mardi 12 mars 2002 Statut Membre Dernière intervention 11 mars 2011 - 11 mars 2011 à 15:31
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

8 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mars 2011 à 20:41
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
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mars 2011 à 18:28
- É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
0
cs_Ferdi Messages postés 8 Date d'inscription mardi 12 mars 2002 Statut Membre Dernière intervention 11 mars 2011
11 mars 2011 à 18:41
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mars 2011 à 18:58
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Ferdi Messages postés 8 Date d'inscription mardi 12 mars 2002 Statut Membre Dernière intervention 11 mars 2011
11 mars 2011 à 19:26
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mars 2011 à 19:47
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
0
cs_Ferdi Messages postés 8 Date d'inscription mardi 12 mars 2002 Statut Membre Dernière intervention 11 mars 2011
11 mars 2011 à 20:32
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
0
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
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
0
Rejoignez-nous