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++Builder Discussion :

Créer un Fichier . mat (Matlab) en C++ Builder


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Créer un Fichier . mat (Matlab) en C++ Builder
    Bonjour au forum C++

    Je développe actuellement un logiciel permettant de convertir un fichier produit par un matériel d'acquisition de signal en fichier .mat pour pouvoir faire du traitement dessus sous Matlab.

    Ce n'est pas la partie récupération des données dans le fichier qui me pose problème car j'ai la structure binaire de ce fichier (fournit par l'éditeur) et la récupération se passe bien.

    J'avais commencé à développer directement sous matlab, mais il s'avère que la récupération est très longue, j'ai donc opté pour un programme compilé en C++ qui doit normalement aller plus vite.

    Or, j'essaye depuis C++ Builder de créer un fichier .mat pour mettre dedans ce que je récupère.

    J'ai vu que Matlab fournissait un API pour les entrées sorties en Matlab, j'essaye donc de m'en servir mais cela ne fonctionne pas.

    J'ai donc reconstruit les .lib fournit à la base pour Visual Studio pour qu'elles soient compatible avec C++ builder (implib)

    J'ai ajouté les chemins d'inclusion des .h et des .lib dans mon projet.

    Pour l'instant mon code est simple, c'est juste ouvrir le fichier .mat et le fermer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "mat.h"
    .........
    // Ouverture du fichier MAT
    MATFile *pmat = matOpen(AnsiString(CheminFichierMat).c_str(), "w");
     
    // On ferme le fichier
    matClose(pmat);
    Lorsque je compile, j'ai ces erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [ilink32 Erreur] Error: '_matOpen' externe non résolu, référencé depuis C:\.......Projet.OBJ
    [ilink32 Erreur] Error: '_matClose' externe non résolu, référencé depuis C:\.......Projet.OBJ
    [ilink32 Erreur] Error: Impossible d'effectuer le lien
    Sachant que je me base sur le fichier exemple de matlab suivant :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
     
    /*
     * matcreat.cpp - MAT-file creation program
     *
     * See the MATLAB External Interfaces/API Guide for compiling information.
     *
     * Calling syntax:
     *
     *   matcreat
     *
     * Create a MAT-file which can be loaded into MATLAB.
     *
     * This program demonstrates the use of the following functions:
     *
     *  matClose
     *  matGetVariable
     *  matOpen
     *  matPutVariable
     *  matPutVariableAsGlobal
     *
     * Copyright 1984-2007 The MathWorks, Inc.
     */
    #include <stdio.h>
    #include <string.h> /* For strcmp() */
    #include <stdlib.h> /* For EXIT_FAILURE, EXIT_SUCCESS */
    #include <vector> /* For STL */
    #include "mat.h"
     
    #define BUFSIZE 256
     
    int main() {
      MATFile *pmat;
      mxArray *pa1, *pa2, *pa3;
      std::vector<int> myInts;
      myInts.push_back(1);
      myInts.push_back(2);
      printf("Accessing a STL vector: %d\n", myInts[1]);
     
      double data[9] = { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 };
      const char *file = "mattest.mat";
      char str[BUFSIZE];
      int status; 
     
      printf("Creating file %s...\n\n", file);
      pmat = matOpen(file, "w");
      if (pmat == NULL) {
        printf("Error creating file %s\n", file);
        printf("(Do you have write permission in this directory?)\n");
        return(EXIT_FAILURE);
      }
     
      pa1 = mxCreateDoubleMatrix(3,3,mxREAL);
      if (pa1 == NULL) {
          printf("%s : Out of memory on line %d\n", __FILE__, __LINE__); 
          printf("Unable to create mxArray.\n");
          return(EXIT_FAILURE);
      }
     
      pa2 = mxCreateDoubleMatrix(3,3,mxREAL);
      if (pa2 == NULL) {
          printf("%s : Out of memory on line %d\n", __FILE__, __LINE__);
          printf("Unable to create mxArray.\n");
          return(EXIT_FAILURE);
      }
      memcpy((void *)(mxGetPr(pa2)), (void *)data, sizeof(data));
     
      pa3 = mxCreateString("MATLAB: the language of technical computing");
      if (pa3 == NULL) {
          printf("%s :  Out of memory on line %d\n", __FILE__, __LINE__);
          printf("Unable to create string mxArray.\n");
          return(EXIT_FAILURE);
      }
     
      status = matPutVariable(pmat, "LocalDouble", pa1);
      if (status != 0) {
          printf("%s :  Error using matPutVariable on line %d\n", __FILE__, __LINE__);
          return(EXIT_FAILURE);
      }  
     
      status = matPutVariableAsGlobal(pmat, "GlobalDouble", pa2);
      if (status != 0) {
          printf("Error using matPutVariableAsGlobal\n");
          return(EXIT_FAILURE);
      } 
     
      status = matPutVariable(pmat, "LocalString", pa3);
      if (status != 0) {
          printf("%s :  Error using matPutVariable on line %d\n", __FILE__, __LINE__);
          return(EXIT_FAILURE);
      } 
     
      /*
       * Ooops! we need to copy data before writing the array.  (Well,
       * ok, this was really intentional.) This demonstrates that
       * matPutVariable will overwrite an existing array in a MAT-file.
       */
      memcpy((void *)(mxGetPr(pa1)), (void *)data, sizeof(data));
      status = matPutVariable(pmat, "LocalDouble", pa1);
      if (status != 0) {
          printf("%s :  Error using matPutVariable on line %d\n", __FILE__, __LINE__);
          return(EXIT_FAILURE);
      } 
     
      /* clean up */
      mxDestroyArray(pa1);
      mxDestroyArray(pa2);
      mxDestroyArray(pa3);
     
      if (matClose(pmat) != 0) {
        printf("Error closing file %s\n",file);
        return(EXIT_FAILURE);
      }
     
      /*
       * Re-open file and verify its contents with matGetVariable
       */
      pmat = matOpen(file, "r");
      if (pmat == NULL) {
        printf("Error reopening file %s\n", file);
        return(EXIT_FAILURE);
      }
     
      /*
       * Read in each array we just wrote
       */
      pa1 = matGetVariable(pmat, "LocalDouble");
      if (pa1 == NULL) {
        printf("Error reading existing matrix LocalDouble\n");
        return(EXIT_FAILURE);
      }
      if (mxGetNumberOfDimensions(pa1) != 2) {
        printf("Error saving matrix: result does not have two dimensions\n");
        return(EXIT_FAILURE);
      }
     
      pa2 = matGetVariable(pmat, "GlobalDouble");
      if (pa2 == NULL) {
        printf("Error reading existing matrix GlobalDouble\n");
        return(EXIT_FAILURE);
      }
      if (!(mxIsFromGlobalWS(pa2))) {
        printf("Error saving global matrix: result is not global\n");
        return(EXIT_FAILURE);
      }
     
      pa3 = matGetVariable(pmat, "LocalString");
      if (pa3 == NULL) {
        printf("Error reading existing matrix LocalString\n");
        return(EXIT_FAILURE);
      }
     
      status = mxGetString(pa3, str, sizeof(str));
      if(status != 0) {
          printf("Not enough space. String is truncated.");
          return(EXIT_FAILURE);
      }
      if (strcmp(str, "MATLAB: the language of technical computing")) {
        printf("Error saving string: result has incorrect contents\n");
        return(EXIT_FAILURE);
      }
     
      /* clean up before exit */
      mxDestroyArray(pa1);
      mxDestroyArray(pa2);
      mxDestroyArray(pa3);
     
      if (matClose(pmat) != 0) {
        printf("Error closing file %s\n",file);
        return(EXIT_FAILURE);
      }
      printf("Done\n");
      return(EXIT_SUCCESS);
    }
    J'utilise C++ Builder XE10 Seatle et Matlab 2016a

    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    salut
    tu a simplement oublié de déclarer dans ton ton <.h> la déclaration de ces 2 fonctions
    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    extern "C" __declspec(dllimport) __stdcall HANDLE matOpen(char*,int);
    extern "C" __declspec(dllimport) __stdcall void matClose(HANDLE);

    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Es-tu obligé de générer des fichiers .mat ?
    MATLAB peut lire n'importe quel type de fichier (texte ou binaire)

    Sinon, tu peux aussi regarder du coté de la bibliothèque matio écrite en C : MAT File I/O Library
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci pour vos réponses.

    Je m'étais rabattu sur écrire moi même les fonctions d'écritures car j'ai trouver le format binaire d'un fichier MAT.
    Je vais regarder la librairie que tu me conseilles Jerome Briot

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je reviens vers vous après une longue pause pour m'occuper d'un autre programme.

    J'essaye donc grâce à la documentation Matlab qui fournit le format des fichiers mat d'en recréer un.
    J'arrive bien à récupérer et donc à recréer l’entête mais lorsqu'il s'agit de récupérer ou d'écrire des variables, cela se complique.

    A un moment, matlab compresse les données à l'intérieur du fichier mat pour un gain de place.
    Ils conseillent d'utiliser la libraire zlib pour la décompression.

    Je recherche désespérément un exemple d'utilisation des fonctions ZCompress et ZDecompresse en C++ mais je n'en trouve pas.

    Est-ce que quelqu'un aurait cela dans ses cartons s'il vous plait ?

  6. #6
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    Jette un coup d'oeil ici http://zlib.net/zlib_how.html
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    ou alors
    pour compresser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TMemoryStream *DestStream= new TMemoryStream(); // Stream de destination
    TMemoryStream *InStream= new TMemoryStream(); // Stream à compresser
    TZCompressionStream  * mZlib= new  TZCompressionStream(DestStream,zcDefault);// on instancie la classe TZCompression Stream avec une compression par défault
    mZlib->CopyFrom(InStream,InStream->Size);  // et voila le Stream est comprimé
    // ton code de traitement du fichier MatLab
     
    // et finalement destruction des objects
    delete mZlib;
    delete InStream;
    delete  DestStream;
    pour la décompression traitement avec la classe TZDecompressionStream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TMemoryStream *DestStream= new TMemoryStream(); // Stream de destination
    TMemoryStream *InStream= new TMemoryStream(); // Stream à compresser
    TZDecompressionStream* mTlib=new TZDecompressionStream(InStream);
    DestStream->CopyFrom(mTlib,0);
    //ton traitement
    // et ne pas oublier la destruction des objets
    delete mTlib;
    delete InStream;
    delete  DestStream;
    voila...
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  8. #8
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci pour ton aide DjmSoftware
    Je vois maintenant comment compresser et décompresser mais il me reste un problème

    Tout le contenu du fichier n'est pas compressé mais seulement des parties qui sont en fait les variables.
    Pour l'instant j'arrive à lire l'entête du fichier et j'arrive au premier contenant de variable.

    Pour cette variable qui est compressé, je connais le nombre de bytes et le départ.
    Comment puis-je faire pour charger mon contenu de N bytes dans un MemoryStream pour pouvoir décompresser

  9. #9
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    le petit exemple suivant te permettra de mieux comprendre la manipulation

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    // le .h
    //---------------------------------------------------------------------------
     
    #ifndef Unit81H
    #define Unit81H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    struct SMatLab{
     char sig[6];                 // structure bidon
     int Dummy ;
     int len ;
     char* data;                  // contient les données à compresser ou  à décompresser
    };
     
     
    class TForm81 : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TButton *Button1;
    	TButton *Button2;
    	void __fastcall FormDestroy(TObject *Sender);
    	void __fastcall Button1Click(TObject *Sender);
    	void __fastcall Button2Click(TObject *Sender);
    private:	// Déclarations utilisateur
    	SMatLab* MatStruct;
    	TMemoryStream *DestStream;
    	TMemoryStream *InStream;
    	TMemoryStream *TmpStream;
    public:		// Déclarations utilisateur
    	__fastcall TForm81(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm81 *Form81;
    //---------------------------------------------------------------------------
    #endif
     
    // le cpp
    // ---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
    #include "zlib.hpp"
    #include "Unit81.h"
    // ---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm81 *Form81;
     
    // ---------------------------------------------------------------------------
    __fastcall TForm81::TForm81(TComponent* Owner) : TForm(Owner) {
    	MatStruct = new SMatLab;
    	strcpy(MatStruct->sig, "Matlab");
    	MatStruct->Dummy = 12;
    	MatStruct->len = 520;
    	MatStruct->data = new char[MatStruct->len];
    	int i = 0;
    	do // boucle de remplissage des data
    	{
    		for (int n = 0; n < 255; n++) {
    			MatStruct->data[i] = n;
    			if (i > MatStruct->len)
    				break;
    			i++;
    		}
    	}
    	while (i <= MatStruct->len);
     
    }
     
    // ---------------------------------------------------------------------------
    void __fastcall TForm81::FormDestroy(TObject *Sender) {
    	delete[]MatStruct->data;
    	delete MatStruct;
    }
     
    // ---------------------------------------------------------------------------
    void __fastcall TForm81::Button1Click(TObject *Sender) {
    	try {
    		DestStream = new TMemoryStream(); // Stream de destination
    		InStream = new TMemoryStream(); // Stream à compresser
    		InStream->WriteBuffer(MatStruct->data, MatStruct->len);
    		InStream->Seek(soBeginning, 0); // on repositionne le stream au début
    		ZCompressStream(InStream, DestStream, zcDefault);
    		// on comprime  le stream
    		DestStream->Seek(soBeginning, 0);
    		InStream->Clear();
    		MatStruct->len = DestStream->Size;
    		InStream->WriteBuffer(MatStruct->sig, sizeof(MatStruct->sig));
    		InStream->WriteBuffer(&MatStruct->Dummy, sizeof(int));
    		InStream->WriteBuffer(&MatStruct->len, sizeof(int));
    		InStream->CopyFrom(DestStream, DestStream->Size);
    		InStream->SaveToFile("Matlab.dat");
    	}
    	catch(Exception & E) {
    		ShowMessage(E.Message);
    	}
    	delete InStream;
    	delete DestStream;
    }
     
    // ---------------------------------------------------------------------------
    void __fastcall TForm81::Button2Click(TObject *Sender) {
    	try {
    		delete[]MatStruct->data; // on efface le buffer
    		DestStream = new TMemoryStream(); // Stream de destination
    		InStream = new TMemoryStream(); // Stream à compresser
    		TmpStream = new TMemoryStream(); // Stream à compresser
    		InStream->LoadFromFile("Matlab.dat");
    		InStream->ReadBuffer(MatStruct->sig, sizeof(MatStruct->sig));
    		InStream->ReadBuffer(&MatStruct->Dummy, sizeof(int));
    		InStream->ReadBuffer(&MatStruct->len, sizeof(int));
    		TmpStream->CopyFrom(InStream, MatStruct->len);
    		TmpStream->Seek(soBeginning, 0); // on repositionne le stream au début
    		ZDecompressStream(TmpStream, DestStream); // on decompresse le stream
    		MatStruct->len = DestStream->Size;
    		MatStruct->data = new char[DestStream->Size]; // creation du buffer;
    		DestStream->Seek(soBeginning, 0); // on repositionne le stream au début
    		DestStream->ReadBuffer(MatStruct->data, DestStream->Size);
    		// Partie décompressée dans le Buffer
    	}
    	catch(Exception & E) {
    		ShowMessage(E.Message);
    	}
    	// ton traitement
    	delete InStream;
    	delete DestStream;
    	delete TmpStream;
    }
    // ---------------------------------------------------------------------------
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  10. #10
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à toi DjmSoftware, cela fonctionne bien maintenant, je suis toujours en train d'avancer dans la structure de mon fichier pour le lire et j'avance petit à petit. Par contre je rencontre un nouveau problème. Je dois lire un octet et récupérer certains bits de celui-ci, comment tu ferais toi ?

  11. #11
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    Par une simple opération de masquage avec l'opérateur et (&)
    Cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  12. #12
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à toi, cela fonctionne bien.

    As-tu déjà rencontré un problème avec la fonction Seek ?

    J'essaye de sauter 4 Bytes car je n'ai pas besoin de les lire et quand j'appelle la fonction Seek comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Stream->Seek(SoCurrent, 4);
    Cela ne me décale pas la position de 4, elle reste inchangé. Je ne comprend pas pourquoi

    J'y ai remédié en faisant un +=4 sur Stream->Position mais c'est pas terrible étant donné qu'il existe une fonction pour faire ça.

  13. #13
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Comportement Normal
    car la déclaration de la méthode est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     int __fastcall Seek(int Offset, System::Word Origin)
    il te suffit donc d'inverser les paramètres

    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

Discussions similaires

  1. Lire un fichier .mat sans MATLAB
    Par pedrosanchau dans le forum Scilab
    Réponses: 5
    Dernier message: 15/04/2011, 09h45
  2. Réponses: 6
    Dernier message: 26/10/2010, 08h54
  3. Réponses: 15
    Dernier message: 11/07/2008, 15h21
  4. Réponses: 3
    Dernier message: 06/06/2007, 07h46

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