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

MATLAB Discussion :

fread fichier .bin


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut fread fichier .bin
    Salut,

    J'essaye de lire un fichier binaire créé à partir du morceau de code java (pour android) ci-dessous (il s'agit d'un accelerometer log):



    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
     ...
    private void open_files() throws FileNotFoundException {
     
    CSensorStates lSenStates=mSenStates;
    CLocProvStates lLPStates=mLPStates;
    DataOutputStream[] lfout=fout;
     
     
    //Open the files and register the listeners
    if (lSenStates.getNumAct()>0) {
    lfout[0]=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file_location("_sensors.bin"))));
    }
    else
    lfout[0]=null;
    }
     
    ...
     
    public void onSensorChanged(SensorEvent ev) {
    DataOutputStream file=fout[0];
     
    long tim=System.currentTimeMillis();
    int len=ev.values.length;
    try {
    file.writeInt(ev.sensor.getType());
    file.writeLong(tim);
    file.writeLong(ev.timestamp);
    file.writeInt(len);
    for (int i=0;i<len;i++)
    file.writeFloat(ev.values[i]);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    J'ai trouvé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    writeInt   (Writes the specified 32-bit int in big-endian order) : ev.sensor.getType()  (value 1 for accelerometer)
    writeLong  (Writes the specified 64-bit long in big-endian order) : tim  (13 digits ~ 1309943772097)
    writeLong  : timestamp (?)
    writeInt  : len (3 ?)
    writeFloat  (Writes the specified 32-bit float in big-endian order) : Ax, Ay, Az (i=3) (should be ~ +/- 0.1, ~ +/- 0.1, ~ - 9.81)
    En utilisant Matlab, j'ai essayé :

    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
    SO = fopen('sensors.bin','r', 'b', 'UTF-8');
     
    SF = fread(SO, 1, 'ubit32=>int', 'b' )    % fread(fileID, sizeA, precision, skip, machineformat)
    fseek(SO, 3, 'bof');                      % using fseek to try to find each 'split' of the raw data
    SF = fread(SO, 1, 'ubit64=>long', 'b' )
    fseek(SO, 11, 'bof');
    SF = fread(SO, 1, 'ubit64=>long', 'b' )
    fseek(SO, 19, 'bof');
    SF = fread(SO, 1, 'ubit32=>int', 'b' )
    fseek(SO, 23, 'bof');
    SF = fread(SO, 1, 'ubit32=>float', 'b' )
    fseek(SO, 27, 'bof');
    SF = fread(SO, 1, 'ubit32=>float', 'b' )
    fseek(SO, 31, 'bof');
    SF = fread(SO, 1, 'ubit32=>float', 'b' )
    Ce qui donne ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SF =
               1
    SF =
      2147483647
    SF =
      2147483647
    SF =
      2147483647
    SF =
        54288168
    SF =
       3.7789724e+009
    SF =
       3.9804677e+009

    Ce qui est faux vu les valeurs attendues..

    J'ai passé un temps monstre à essayer différentes combinaisons mais je reste bloqué..


    Si quelqu'un a une idée ..

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pourrais-tu fournir un exemple de fichier à lire afin que l'on puisse faire des essais?
    Je ne suis pas sûr que la fonction fseek ait sa place ici.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut
    Bonjour Jerome,
    En effet, le fseek est juste destine a trouver le bon arrangement des octets.
    Ci-joint le fichier test que j'essaie de lire (il faut changer l'extension .txt par .bin car le forum n'a pas accepte mon .bin)
    Avec mon code je pense que je suis pas tres loin mais la je patine sans avancer.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut
    autant pour moi, le fseek n'est en effet pas necessaire, car on se deplace automatiquement dans les donnees avec le fread, ce qui est bien !

    donc en fait j'ai remplace les 'ubitx=>int' par 'int32' (int64) et ca marche.
    ce qui m'echappe c'est les 2 'long' que j'ai du remplace par 'int64'.

    un temps fou passe sur quelquechose de pas si complique ! arf ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture fichier .bin ?
    Par touki79 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 15h38
  2. Comment installer un fichier .bin
    Par youg786 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 10/05/2006, 17h04
  3. question concernant les fichier.bin
    Par argon dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 27/08/2005, 17h44
  4. Lecture d'un fichier .bin
    Par nanas dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 06/05/2005, 11h02
  5. Lire un fichier bin et cue
    Par calfater dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 18/06/2004, 14h43

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