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 :

Librairies Matlab pour lire des fichiers .mat avec C#


Sujet :

MATLAB

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut Librairies Matlab pour lire des fichiers .mat avec C#
    Bonjour,

    je voudrais créer une application en C# sous visual studio 2005 qui doit lire des données stockées dans des fichiers .mat.
    Je voudrais donc savoir comment appeler les fonctions natives de matlab

    Pourriez-vous m'indiquer de la doc là dessus?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Désolée je n'ai pas de réponse toute faite mais quelques liens trouvés sur le site de l'éditeur The Mathworks pourraient t'aider :
    MATLAB Central File Exchange - Integrating MATLAB with C#

    How can I call MATLAB as an ActiveX automation server from C#? - 1-SJ9GS

    Bon courage

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Merci,
    mais je ne souhaite pas intégrer du code Matlab ou utiliser le compilateur matlab
    Je veux juste pouvoir lire, et éventuellement écrire mais ça sera pour plus tard, des fichiers de données au format matlab

    Je voudrais appeler les fonctions des librairies libmat.dll, libmx.dll, libut.dll...
    C'est pourquoi je recherche de la doc pour savoir comment importer les fonctionnalités/types de ces libraires
    et puis quelques exemples....

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 924
    Points
    52 924

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Dut Voir le message
    ah oui!
    cela m'a l'air pas mal du tout!
    je vais regarder ça de plus près...

    Merci!

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Après un ptit break,
    je viens de me pencher sur ce projet

    la librairie CSMatIO semble faite pour lire/écrire des fichiers Matlab binaire
    mais qu'est-ce donc exactement??

    moi, je veux lire/écrire des fichiers matlab de données
    ils servent à stocker des données dans des champs/Structures/tableaux de valeurs...
    est-ce que c'est ça??...

    merci

  7. #7
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    A priori cette librairie permet de lire/écrire des fichiers au format MAT version 5 (la version signifie qu'ils sont lisibles par n'importe quelle version de MATLAB à partir de la 5).
    Les fichiers MAT sont un format "propriétéaire" MATLAB : ils sont lisibles très facilement par MATLAB, et comme ici des passerelles sont des fois développées pour qu'on puisse les lire ou écrire à partir d'un autre logiciel.

    Dedans tu mets des variables qui ont une valeur, elles peuvent être de n'importe quel type pour autant qu'il soit compréhensible par MATLAB (structures, matrices numériques, tableaux de chaines de caractères...)

    Donc je pense que cette librairie doit faire exactement ce que tu veux.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Yeah!

    la librairie csmatio.dll fait exactement ce que je veux
    je n'ai plus qu'à me faire ma librairie chapeau...

    par contre, pour ceux qui voudrait l'utiliser,
    j'ai déjà vu qq ptits bugs dans la classe 'MatFileReader', dans la méthode 'ReadMatrix', dans le switch (type), il manque les cas suivants :
    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
                case MLArray.mxUINT16_CLASS:
                        mlArray = new MLUInt16(name, dims, type, attributes);
                        //read real
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<UInt16>)mlArray).RealByteBuffer,
                            (ByteStorageSupport)mlArray);
     
                        // read complex
                        if (mlArray.IsComplex)
                        {
                            tag = new ISMatTag(buf);
                            tag.ReadToByteBuffer(((MLNumericArray<UInt16>)mlArray).ImaginaryByteBuffer,
                                (ByteStorageSupport)mlArray);
                        }
                        break;
                    case MLArray.mxINT16_CLASS:
                        mlArray = new MLInt16(name, dims, type, attributes);
                        //read real
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<Int16>)mlArray).RealByteBuffer,
                            (ByteStorageSupport)mlArray);
     
                        // read complex
                        if (mlArray.IsComplex)
                        {
                            tag = new ISMatTag(buf);
                            tag.ReadToByteBuffer(((MLNumericArray<Int16>)mlArray).ImaginaryByteBuffer,
                                (ByteStorageSupport)mlArray);
                        }
                        break;
                    case MLArray.mxUINT32_CLASS:
                        mlArray = new MLUInt32(name, dims, type, attributes);
                        //read real
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<UInt32>)mlArray).RealByteBuffer,
                            (ByteStorageSupport)mlArray);
     
                        // read complex
                        if (mlArray.IsComplex)
                        {
                            tag = new ISMatTag(buf);
                            tag.ReadToByteBuffer(((MLNumericArray<UInt32>)mlArray).ImaginaryByteBuffer,
                                (ByteStorageSupport)mlArray);
                        }
                        break;
                    case MLArray.mxINT32_CLASS:
                        mlArray = new MLInt32(name, dims, type, attributes);
                        //read real
                        tag = new ISMatTag(buf);
                        tag.ReadToByteBuffer(((MLNumericArray<Int32>)mlArray).RealByteBuffer,
                            (ByteStorageSupport)mlArray);
     
                        // read complex
                        if (mlArray.IsComplex)
                        {
                            tag = new ISMatTag(buf);
                            tag.ReadToByteBuffer(((MLNumericArray<Int32>)mlArray).ImaginaryByteBuffer,
                                (ByteStorageSupport)mlArray);
                        }
                        break;
    ...

    Merci à vous

  9. #9
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Points : 67
    Points
    67
    Par défaut
    Que c'est bien de trouver des gens qui ont eu besoin d'un truc 1 mois avant soi et l'ont résolu ... J'en profite pour remercier les responsables/modérateurs, toujours serviables

    Et pour confirmer que CSMatIO: MAT-file I/O API for .NET 2.0 est nickel pour Lire ou Ecrire des fichiers .mat (fichiers de données Matlab) dans une application .NET.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Bon,
    bah en fait, je me suis emballée un peu vite...

    Les fichiers que je dois lire avec cette librairie ne sont pas tous au format V5...

    J'ai essayé de sauvegarder ces fichiers dans une autre version en faisant, à partir de Matlab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save monfichier.mat -V6
    et là, ça marche, je peut les lire avec la libraire csmatio.dll

    Y aurait-il un moyen pour faire cette sauvegarde en V6 à partir de code C#?...

  11. #11
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Je ne comprends pas bien le problème.
    De ce que j'ai compris de ta librairie elle fonctionnerait avec les fichiers MAT format V5 (or là tu dis qu'elle arrive à lire du V6, c'est plutôt bien).
    Donc pour moi tu pouvais depuis C# :
    • écrire des fichiers MAT v5 => lisible par toutes les versions de MATLAB depuis la v5
    • lire des fichiers MAT v5 => il faut que le fichier ait été sauvegardé au format v5 (ce qui est possible aussi avec toutes les versions de MATLAB depuis v5 pour peu qu'on lui indique)
    Le problème qui se pose c'est si tu n'as pas la main sur la sauvegarde en MATLAB (ie c'est quelqu'un d'autre qui fait le save, et lui il s'en fiche un peu de ton problème et donc enregistre dans sa version).
    C'est ça ?

    Là je pense pas qu'on puisse faire grand-chose pour toi, il faudrait réussir à trouver sur le net une librairie qui arrive à lire aussi v6, v7, ...
    Le problème étant que si le format MAT v5 avait été "dévoilé" par The Mathworks, je ne suis pas sure que ce soit le cas pour les versions supérieures

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    EN fait, il semblerait que certains fichiers que je dois lire soient sauvegardés en V4.2, d'après ce que j'ai pu récupéré comme info
    en fait, la librairie csmatio ne trouve pas le bon en-tête qui devrait commencé parpour qu'elle puisse le lire...

    j'arrive pas à faire de save -V5 avec Matlab mais save -V6 ça marche et je peux ensuite lire le fichier avec la dll csmatio...

    donc voilà,
    je ne suis pas trop avancée...

  13. #13
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Oui je me suis embrouillée depuis le début sur les versions
    Dans l'aide de LOAD de ma version il y a ça :
    Command Option | Saves a MAT-File That You Can Load In
    -----------------+----------------------------------------------
    SAVE ... -V7.3 | Version 7.3 or later
    -----------------+----------------------------------------------
    SAVE ... -V7 | Versions 7.0 through 7.2 (or later)
    -----------------+----------------------------------------------
    SAVE ... -V6 | Versions 5 and 6 (or later)
    -----------------+----------------------------------------------
    SAVE ... -V4 | Versions 1 through 4 (or later)
    Tu as des fichiers sauvegardés en v4.2 Tu es sure ? Parce que ça date quand même de la préhistoire matlabique
    C'est quoi l'entête du fichier (si lisible bien sûr).

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    Tu as des fichiers sauvegardés en v4.2 Tu es sure ? Parce que ça date quand même de la préhistoire matlabique
    Eh oui!
    Mais c'est que nous avons des appli d'une autre ère...
    Mes fichiers sont créés par des appli qui tournent sous DOS...

    Citation Envoyé par caro95470 Voir le message
    C'est quoi l'entête du fichier (si lisible bien sûr).
    bah, justement, il semblerait qu'il n'y ait pas d'en-tête ...

    bon je vais faire quelques fouilles pour essayer de trouver une solution...
    si vous avez des idées, je suis preneuse...

    à +

  15. #15
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Et tu n'as pas moyen pour ces fichiers en particulier de passer par MATLAB (qui lui devrait savoir les lire) et les re-sauvegarder en version v6 ?
    Enfin s'il s'agit réellement de MAT-File au sens MATLAB...

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    j'ai trouvé autre chose ici

    là, j'arrive à lire mes fichiers de la mystérieuse version...
    par contre je ne suis pas sûre qu'il puisse accéder à des structures...
    mais moi, ça me convient puisque les fichiers en question ne contiennent pas de structures mais que des char array ou des double array...

Discussions similaires

  1. lire des fichiers .mat avec python
    Par diallokoula dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 14/01/2011, 14h25
  2. Problème pour lire des fichiers XML avec tFileInputXML- probleme format date
    Par rogermar dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 06/10/2010, 15h46
  3. Librairie pour lire des fichiers Matlab
    Par melleb dans le forum C#
    Réponses: 8
    Dernier message: 17/06/2008, 16h44
  4. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 13h38
  5. Réponses: 1
    Dernier message: 02/05/2007, 10h22

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