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 lecture dans un stream!


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut Problème de lecture dans un stream!
    Salut a tous!

    Voilà mon problème, j'ai déclaré un buffer (tableau de char) pour lire le contenu d'un ifstream (stream d'entréé sur un fichier).
    Je fais donc un read d'une quantité de donnée size, ensuite pour tester si j'ai bien ce qu'il me faut dans le buffer, j'affiche son contenu, mais là je me rend compte que la première valeur du buffer est correcte et que toute les autres ne sont pas les valeurs de mon fichier. En effet les autres valeurs sont toute identique et valent en (decimal) -52?!?!?!

    voici le code en abrégé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //declaration des variables pour la lecture
    const int Size = 188;
    char bufferIn[Size];
     
    fichier1.seekg(1,ios::beg);
    fichier1.read(bufferIn,Size);
    //affichage
    for (int k = 0; k<Size;k++)
    {
    	cout << (int)bufferIn[k] << endl;
    }
    Est ce qu'il y a un truc que je fais faux avec ma lecture???je comprend pas pourquoi j'ai ces valeurs bizarres???

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    beurk...
    Ton fichier a quelle taille ? Quel est l'état du ifstream à la fin de la lecture ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    tranquille le (int) c'est juste pour l'affichage, car avec les caractère ca me fait un caractère que je suis pas capable de reproduire. tellement il est bizarre.

    mon fichier a une taille de 160KBytes, mais je le lis par paquet de 188 bytes.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    etat du ifstream????

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    voilà comme j'ai décarer l'ouverture du stream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ifstream fichier1("SI-POLSAT.m2t",ios_base::in|ios_base::binary);

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Oui, l'état du flux. Quand on lit sur un flux, on peut connaître son état après - arrivé à la fin ce genre de choses, ... -

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    Ah ok, mais dans ce cas la, c'est pas possible qu'il soit arrivé à la fin puisque je ne lis que les 188 premiers caractere alors qu'il en comprte plus de 160'000.

    Quand je lis les autres series de 188, je place mon curseur avec la méthode seekg() 188 plus loin et ainsi de suite...

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Le but de la vérification sert à savoir aussi si on a bien ouvert le bon fichier, ... donc fais-le... Si tu ne vérifies pas les erreurs potentielles simples, ne t'étonne pas si on ne va pas t'aider à chercher plus loin par la suite.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    Ok désolé t'as raison. je suis désolé je suis un peu stress c'est pour ça.

    alors je teste l'état avec is_open() et good()

    is_open me renvoit 1 --> OK
    good me renvoit 0 --> pas OK...!!!

    Ce qui signifie que j'ai effectivement un problème, mais je ne vois pas de quoi ca pourrait venir...
    il faut encore préciser une chose c'est que ce n'est pas la première lecture que je fais sur ce stream, je sais si ca peut poser problème ou pas???

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Peut-être. Quel est l'état avant que tu ne lise les données ?
    En tout cas, on commence à expliciter le problème, donc on avance

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    Voila j'ai mis des tests un peu partout, et je peux affirmer que le problème survient à ce moment là:

    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
     
    int TestPT = 0;
    long NbPaquet = 0;
    int indice = 0;
    // Au passage on va compter le nombre de paquet contenu dans le fichier
    	while (TestPT != EOF){
    		fichier1.seekg(indice*Size,ios::beg);
    		indice++;
    		TestPT = fichier1.get();
    		if(TestPT == 0x47){
    			NbPaquet++;
    		}else {
    			cout << "End Of File" << TestPT << endl;
    		}
    	}
    	cout << "Nbpaquet:" << NbPaquet << endl;
    Je sais pas pourquoi mais je sens que le c'est le EOF qui va me poser problème, peut-être qu'une fois qu'on atteint le fin du fichier il faut réouvrir un nouveau stream...

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu peux faire directement fichier1.eof() pour faire ton test
    Fais un clear() aussi sur ton stream pour que les erreurs soient effacées.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    MAGNIFIQUE!!!!!!!!!
    en fait y a même pas besoin de faire le clear avec fichier.eof() ca fait pas d'erreur, je l' ai quand même mis par sécurité...

    Merci c'est super cool.

    J'ai encore une petite question et après je te laisse tranquille
    en affichant les caracteres contenu dans le buffer, j'ai une anomalie que voici:

    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
     
    47
    40
    0
    10
    0
    0
    ffffffb0   --> alors que je ne devrais avoir que b0 ici
    1d
    0
    0
    ffffffe5  --> ici aussi je devrais juste avoir e5
    0
    0
    .
    .
    .
    Je comprend pas d'où viennent ces ffffff ?!?!?

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Aucune idée
    Tu affiches de l'hexa ou pas ? Si c'est de l'hexa que tu affiches, c'est simplement le nombre négatif qui est affiché.

  15. #15
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    moi ça me fait aussi penser à de l'hexa...
    Tu n'afficherais pas par hasard du non signé???

    Parce que ou c'est un très grand nombre, ou c'est un nombre négatif! (code complément à deux)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    Ouai c'est de l'Hexa, ca veut dire qu'il interprete la donnée comme une valeur négative, c'est donc simplement un problème d'affichage, je ne pense pas que la valeur stockée dans le tableau soit négative, tu sais comment je pourrais vérifier cela??

  17. #17
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Je sais pas trop... peut-être remplacé ton cast C par static_cast, plus propre...

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    mets un staic_cast<unsigned int>, tu n'auras pas d'affichage de nombres négatifs - mais tu auras des grands nombres... -

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 65
    Points
    65
    Par défaut
    J'ai essayé le static_cast mais ca ne change rien... j'ai toujours mes ffffff....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    cout << hex << static_cast<unsigned int>(bufferIn[k]) << endl;

  20. #20
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    pourquoi hex ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de lecture d'un stream dans une boucle
    Par Kerberos69 dans le forum VBScript
    Réponses: 3
    Dernier message: 09/03/2009, 19h43
  2. problème de lecture dans un fichier
    Par phy4me dans le forum Fortran
    Réponses: 1
    Dernier message: 20/05/2007, 20h55
  3. [XML][DOM][ZIP] Problème de lecture dans un zip
    Par gocin dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/04/2007, 11h41
  4. Problème de lecture dans un tableau associatif … ?
    Par sadao dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/07/2006, 22h24
  5. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13

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