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 :

Exportation de données mixtes (nombres+chaines de caractères) vers Excel


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Exportation de données mixtes (nombres+chaines de caractères) vers Excel
    Comment exporter de MATLAB vers EXCEL des chaines de caractère et des tableaux de nombre ?
    Par exemple comment écrire dans la première colonne du fichier excel les chaines de caractères 'chat' et 'chien' (de longueur différente) et dans les deux colonnes suivantes le tableau [1.25,2;3,4] ?

    On peut facilement faire le contraire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [tab_num,tab_chaine]=xlsread('nomfichier.xls')
    J'arrive à écrire uniquement un tableau de nombres avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    csvwrite('essai1.csv',[1.25,2;3,4])
    J'arrive aussi à écrire uniquement un tableau de chaines de caractère de même longueurs avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dlmwrite('essai2.csv',['ab';'cd'],'')
    Merci à ceux qui pourront m'aider.

  2. #2
    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 : 53 166
    Points
    53 166
    Par défaut
    Pour commencer, voir la : Comment interfacer MATLAB avec Excel ?

    Sinon, pour écrire du texte dans un fichier csv, il faut, par exemple, procéder comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    str = {'chat' ; 'chien'};
    num = [1.25 2 ; 3 4];
     
    X = strcat(str,',',num2str(num(:,1),'%.2f'),',',num2str(num(:,2),'%d'));
     
    fid = fopen('test.csv','wt');
        fprintf(fid,'%s\n',X{:});
    fclose(fid);
    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)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir
    ça ne marche pas chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ??? Error using ==> num2str
    Format must contain field width.
    
    On line 4  ==> X = strcat(str,',',num2str(num(:,1),'%.2f'),',',num2str(num(:,2),'%d'));
    
    alors à tout hasard j'ai supprimé les formats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    X = strcat(str,',',num2str(num(:,1)),',',num2str(num(:,2)));
    et ça marche ! GENIAL !! Merci beaucoup !!!
    Il va falloir que je me documente un peu sur fprintf qui a l'air bien pratique et dont je ne comprends pas complètement le fonctionnement, en particulier pourquoi ça ne marche pas si je remplace X{:} par X dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,'%s\n',X{:});

  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 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 : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par laurent.bras Voir le message
    alors à tout hasard j'ai supprimé les formats :
    C'est vrai que c'était le comportement de NUM2STR, mais à partir de la R2008a, cette limitation ne semble plus exister.
    Concrètement ici c'est le '%d' que MATLAB n'aime pas. Il lui faudrait un champ du type '%5d' par exemple.

    Citation Envoyé par laurent.bras Voir le message
    en particulier pourquoi ça ne marche pas si je remplace X{:} par X dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,'%s\n',X{:});
    La solution que j'ai proposée est optimisée car il n'y a qu'un seul appel à FPRINTF

    MAis rien n'empêche de faire plusieurs appels à FPRINTF dans une boucle FOR-END pour écrire le fichier csv ligne par ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    str = {'chat' ; 'chien'};
    num = [1.25 2 ; 3 4];
     
    fid = fopen('test.csv','wt');
        for n=1:numel(str)
            fprintf(fid,'%s %.2f %d\n',str{n},num(n,1),num(n,2));
        end
    fclose(fid);
     
    edit test.csv
    Enfin pour la notation X{:}, je te renvoie encore vers la : Les tableaux de cellules (cell array)
    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)

  5. #5
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    Perso, j'utilise à la fois fprintf pour du texte et dlmwrite (avec le paramètre -append) pour des nombres, ce qui permet une conversion plus rapide.
    MATLAB R2008a - Windows XP 32 bit et Windows Vista 64 bit

  6. #6
    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 : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par nahouto Voir le message
    Perso, j'utilise à la fois fprintf pour du texte et dlmwrite (avec le paramètre -append) pour des nombres, ce qui permet une conversion plus rapide.
    Tu aurais un exemple à nous montrer ?

    Je vois mal comment tu peux ajouter des colonnes numériques après une colonne de chaine de caractères.

    Je ne parle pas ici d'ajouter des lignes de nombres à des lignes de chaine de caractères...
    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)

  7. #7
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par Dut Voir le message
    Tu aurais un exemple à nous montrer ?

    Je vois mal comment tu peux ajouter des colonnes numériques après une colonne de chaine de caractères.

    Je ne parle pas ici d'ajouter des lignes de nombres à des lignes de chaine de caractères...
    ah non, dans mon cas c'était des lignes.

    Pour des colonnes, ce serait plus long à faire et inutile.
    MATLAB R2008a - Windows XP 32 bit et Windows Vista 64 bit

  8. #8
    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 : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par nahouto Voir le message
    ah non, dans mon cas c'était des lignes.
    Dans ce cas des lignes, il me semble que la méthode la plus rapide est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    str = {'chat' ; 'chien'};
    num = [1.25 2 ; 3 4];
     
    fid = fopen('test.csv','wt');
        fprintf(fid,'%s,',str{:});
        fprintf(fid,'\n');
        fprintf(fid,'%.2f,%d,\n',num.');
    fclose(fid);
     
    edit test.csv
    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)

  9. #9
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par Dut Voir le message
    Dans ce cas des lignes, il me semble que la méthode la plus rapide est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    str = {'chat' ; 'chien'};
    num = [1.25 2 ; 3 4];
     
    fid = fopen('test.csv','wt');
        fprintf(fid,'%s,',str{:});
        fprintf(fid,'\n');
        fprintf(fid,'%.2f,%d,\n',num.');
    fclose(fid);
     
    edit test.csv
    En effet, c'est bien plus rapide (environ 10 fois plus rapide pour mes grosses matrices).

    Merci !
    MATLAB R2008a - Windows XP 32 bit et Windows Vista 64 bit

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci à tous pour vos remarques très enrichissantes, je vais enfin pouvoir tout écrire sur un fichier excel !
    Il y a finalement beaucoup plus simple avec la nouvelle version de Matlab (que je ne possède pas), d'après l'aide en ligne sur www.mathworks.com, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xlswrite('essai.xls',{'chat',1.25,2;'chien',3,4})
    Cela marche aussi bien pour écrire en ligne ou en colonne, et il y a un grand nombre de possibilités supplémentaires très souples et faciles d'utilisation.

Discussions similaires

  1. [Débutant] récupérer un nombre à un endroit donné d'une chaine de caractères
    Par kevin07 dans le forum MATLAB
    Réponses: 5
    Dernier message: 30/08/2011, 22h04
  2. Conversion nombre -> chaine de caractère
    Par sempire dans le forum DB2
    Réponses: 2
    Dernier message: 09/06/2009, 18h53
  3. Réponses: 3
    Dernier message: 01/08/2008, 09h58
  4. nombre chaines de caractère dans un colonne de table
    Par h_zak dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 17/06/2008, 14h23
  5. extraction d'une donnée d'une chaine de caractères.
    Par LESOLEIL dans le forum Langage
    Réponses: 10
    Dernier message: 20/04/2006, 12h00

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