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 :

lecture d'un fichier binaire


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    1 299
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 1 299
    Par d�faut lecture d'un fichier binaire
    Bonjour, je souhaite lire un fichier binaire. En allant sur google et la faq c++ de ce forum, j'ai compris l'utilisation des fonctions read() et write(). J'ai bien compris qu'on lit octet par octet...

    Mais mon probl�me est le suivant : je veux lire un fichier g�n�r� par une machine de mesure. Ce fichier contient N1 lignes d'ent�te (date de la mesure, nom de la machine, commentaire de l'op�rateur,...) et N2 lignes de mesure (contenant 5 colonnes).

    Comment lire la ligne "commentaire" ? Car elle peut contenir autant de caract�res qu'on veut (en g�n�ral il n'y en aura pas non plus 150 000)

    Comment savoir que je suis arriv� � la fin de mon fichier ? Le nombre de lignes de donn�es exp�rimentales d�pend du mat�riau mesur�... Avec un fichier texte je faisais

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    while(std::getline(fid, line))
    {
     
    }
    En fait, j'aimerais bien faire l'algorithme suivant :

    1) lire tout le fichier et le stocker dans un std::vector<std::string> >
    2) spliter chaque std::string pour ne r�cup�rer que les donn�es qui m'int�ressent

    Quelqu'un aurait-il une id�e pour r�pondre � mes 2 questions ?

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Sans la sp�cification pr�cise du format utilis� par la machine, il va �tre difficile de t'aider. Tout ce qui me vient � l'esprit, c'est que le caract�re \0 encode une fin de ligne en ASCII. Encore faut il que ce soit le choix d'implement de la machine.

    Tu peux nous en dire plus ?

  3. #3
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par d�faut
    Comme jblecanard, j�essaierais dans un premier temps de lire le champ "commentaire" caract�re par caract�re jusqu'� trouver un '\0', en croisant les doigts pour qu'il n'y ait pas de probl�me d'endiadness, d'unicode, d'absence de '\0'etc. dans le fichier binaire

    Donc qqchose comme �a :

    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
    std::ifstream ifs("file.data", std::ios::binary);
     
    //
    //... read other field...
    //
     
    // read commentaire
    std::string commentaire;
    char c;
    while(ifs)
    {
      ifs.read(&c, 1);
      if(c != '\0')
      {
         commentaire.push_back(c);
      }
      else
      {
         break;
      }
    }
    Si �a ne fonctionne pas, je crains qu'il ne faille contacter l'auteur du fichier binaire pour lui demander les sp�cifications du format, ou alors l'inspecter avec un �diteur de texte du genre ultraedit pour le comprendre par toi-m�me.

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    1 299
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 1 299
    Par d�faut
    Bonjour,

    merci pour vos r�ponses.

    Et avez-vous une id�e de la mani�re dont je pourrais d�tecter le nombre de lignes de mon fichier ? Car bien que le format soit toujours le m�me (N1 lignes d'ent�te, 5 colonnes etc..), le nombre de lignes N2 de donn�es exp�rimentales est quant � lui variable.

    Merci encore

  5. #5
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut
    Citation Envoy� par salseropom Voir le message
    Bonjour,

    merci pour vos r�ponses.

    Et avez-vous une id�e de la mani�re dont je pourrais d�tecter le nombre de lignes de mon fichier ? Car bien que le format soit toujours le m�me (N1 lignes d'ent�te, 5 colonnes etc..), le nombre de lignes N2 de donn�es exp�rimentales est quant � lui variable.

    Merci encore
    Une fois que tu as d�termin� la position de la premi�re mesure, ce ne sera pas le plus difficile :

    Les mesures sont en effet, toujours du m�me type, et tu peux donc te baser sur l'entr�e de la FAQ Comment calculer la taille d'un fichier ? pour savoir la taille totale des donn�es � lire.

    Il te suffit ensuite de diviser cette taille par la taille du type de donn�es que tu lis pour obtenir le nombre de donn�es

    Il me semble cependant dangereux de permettre l'�criture de commentaires de tailles inconnue : en th�orie, les en-t�tes de fichiers binaires ont une taille fixe, ce qui permet de savoir exactement � quelle position commencent r�ellement les donn�es
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. R�ponses: 1
    Dernier message: 21/12/2006, 13h06
  2. lecture d'un fichier binaire
    Par booby dans le forum C
    R�ponses: 17
    Dernier message: 20/09/2006, 16h11
  3. lecture d'un fichier binaire
    Par Tonta dans le forum C++
    R�ponses: 1
    Dernier message: 14/04/2006, 06h53
  4. lecture d'un fichier binaire en VB
    Par olivier] dans le forum VB 6 et ant�rieur
    R�ponses: 7
    Dernier message: 28/12/2005, 11h17
  5. Lecture d'un fichier binaire
    Par Gloubie dans le forum Langage
    R�ponses: 9
    Dernier message: 05/12/2005, 12h51

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