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 :

Ouvrir 10 fichiers .m et récupérer les résultats


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Ouvrir 10 fichiers .m et récupérer les résultats
    Bonjour à tous,

    Mon objectif est d'ouvrir en boucle 10 fichiers matlab. Dans chacun de ses fichiers, il y a des résultats que j'aimerais récupérer pour synthétiser le tout sous forme de tableau dans le fichier .m où j'écris ce code.
    Par exemple, avoir un tableau avec en lignes, les 10 différentes sessions et en colonnes les résultats préalablement calculés dans chacun des 10 fichiers (des temps de transition).
    J'espère être assez claire...

    Pour cela, mon code est le 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
    clear all; 
    close all;
     
    count = 1;
     
    for i = 1:10
     
    fn = ['Session' num2str(i) '.m'];
    fid=fopen(fn);
    fid = fopen(sprintf('Session%d.m',i));
    end
     
    % Need to close all open files to don't exhaust the nb of files that windows will allow you to open. 
    for i = 1:10
    fid = fopen(sprintf('Session%d.m',i));
     
        % Variables
        fprintf(fid,'%s\t%5.4f\t%5.4f\t%5.4f\t%5.4f\n','Session%d.m',{i},Transition_Time1(count,:),Transition_Time2(count,:),Transition_Time3(count,:),Transition_Time4(count,:));
        count = count +1;
        fclose(fid);
    end
    Mon problème est que je n'ai pas réussi à faire comprendre à Matlab que mes variables Transition_Time(1 à 4) sont extraites de chacun des 10 fichiers préalablement ouverts.

    Est-ce que vous auriez une idée ?

    Merci beaucoup !
    Bonne journée

  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
    Tout ceci est assez… incompréhensible

    Le bloc de code suivant ne sert strictement à rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i = 1:10
     
    fn = ['Session' num2str(i) '.m'];
    fid=fopen(fn);
    fid = fopen(sprintf('Session%d.m',i));
    end
    Qu'entends-tu par "10 fichiers matlab" ?
    Des fichiers créés avec la fonction save et portant l’extension .mat ?
    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
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Je te remercie pour ta réactivité !

    Je vais essayer d'être plus claire:

    J'ai mené 10 expériences. A chaque expérience correspond un fichier matlab appelé "Session (1 à 10).m". Dans chacun de ses fichiers, j'ai traité le signal et effectué différents calculs comme le temps de transition.

    J'ai créé un nouveau script dans lequel j'aimerais :
    1. Ouvrir ces 10 sessions
    2. En extraire les résultats de mes différents calculs pour synthétiser le tout sous forme de tableau.
    Lignes du tableau = mes 10 sessions
    Colonnes du tableau = mes différents calculs (temps de transition, puissance, fréquence et caetera).

    J'ai réussi à être compréhensible ?

  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
    D'accord mais que contiennent exactement les fichiers session.m ?

    Peux-tu nous montrer un aperçu ?
    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 à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Oui, bien sûr !

    Un extrait de mon code correspondant à ma Session 1.m :

    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
    % HEART RATE 1
    [HR1,date_HR1] = xlsread('HR\HR1.xlsx'); % Read the excel file with HR values
     
    %[...]
     
    date_vector=datevec(date_HR1,'HH:MM:SS'); % Convert time to vector component
    Min1=date_vector(:,5); % Selection of the minutes
    Sec1=date_vector(:,6); % Selection of the seconds
    Sec11=Sec1/60; % Convert seconds to minutes
    Min11=Min1+Sec11; % All the datas are comprised into Min2 (not just the each minute)
     
    % CALCUL - TRANSITION TIME
    T0=0; T1=15; T2=16.07;T3=25;T4=27.38;T5=30;T6=31.4;T7=40;T8=41.6;
    Transition_Time1=T2-T1
    Transition_Time2=T4-T3
    Transition_Time3=T6-T5
    Transition_Time4=T8-T7
     
    %[...]
     
    figure (1)
     
    % GRAPHIQUE - Heart Rate 1
     
    plot(Min11,HR1,'k')
    set(gcf, 'color', 'white') 
    xlim([0 50]); ylim([120 185]);
    xlabel('Time [min]'); ylabel('Cardiac Frequency [beat/min]');
    title('Cycling - Session 1','FontSize', 14);

  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
    Pour commencer, le bloc suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    % CALCUL - TRANSITION TIME
    T0=0; T1=15; T2=16.07;T3=25;T4=27.38;T5=30;T6=31.4;T7=40;T8=41.6;
    Transition_Time1=T2-T1
    Transition_Time2=T4-T3
    Transition_Time3=T6-T5
    Transition_Time4=T8-T7
    devrait être écrit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % CALCUL - TRANSITION TIME
    T = [0 15 16.07 25 27.38 30 31.4 40 41.6];
     
    Transition_Time(1) = T(3)-T(2);
    Transition_Time(2) = T(5)-T(4);
    Transition_Time(3) = T(7)-T(6);
    Transition_Time(4) = T(9)-T(8);
    Voir Comment créer dynamiquement des variables nommées A1, A2, A3, ..., AN ?

    Revenons à ton problème initial. Tu voudrais donc récupérer les valeurs des 4 Transition_Time dans chaque session.m.
    Mais pour les mettre où ? Dans un autre fichier, dans le même fichier session.m ?
    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 à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Ah oui merci ! Effectivement, avec cette écriture, on sent plus le Matlab Style !

    Oui, je voudrais récupérer les valeurs des 4 Transition_Time dans chaque session.m pour les mettre dans un autre fichier, intitulé par exemple Results.m.

  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
    Je vois mieux ce que tu souhaites faire.

    Mais alors, pourquoi as-tu plusieurs fichiers session.m alors qu'il semblent tous faire la même chose, seules les données semblent être différentes ?
    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 à l'essai
    Inscrit en
    Janvier 2014
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Parce que :

    - j'ai plus de 50 000 valeurs différentes,
    - je suis novice en Matlab,
    - ma tutrice m'a dit que ce serait plus clair,
    - je ne sais pas faire dans l'automation !



    De ce fait, ce que je souhaite faire est réalisable non ?
    Ma tutrice a déjà fait ça à la différence qu'elle avait un script (et non 10!) qui avait automatisé l'ouverture/traitement/calculs de ses N fichiers.

  10. #10
    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
    J'insiste sur ce point car j'ai bien l'impression que tu te diriges vers une usine à gaz pour rien.

    Bon on t'a demandé de faire plusieurs scripts, alors on va poursuivre dans ce sens.

    Le plus simple, à ton niveau, consiste à enregistrer les résultats dans des fichiers .mat avec la fonction save :

    Dans les script sessions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    % CALCUL - TRANSITION TIME
    T = [0 15 16.07 25 27.38 30 31.4 40 41.6];
     
    Transition_Time(1) = T(3)-T(2);
    Transition_Time(2) = T(5)-T(4);
    Transition_Time(3) = T(7)-T(6);
    Transition_Time(4) = T(9)-T(8);
     
    filename = session1data.mat;
    save(filename, 'Transition_Time');
    Puis dans le script qui écrit tous les résultats dans un même fichier, tu lis ces mêmes fichiers .mat avec la fonction load :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fid = fopen('allsessionsdata.txt', 'wt');
     
    for i = 1:10
     
        filename = sprintf('session%ddata.mat', i);
        load(filename);
     
        fprintf(fid,'Session%d.m\t%5.4f\t%5.4f\t%5.4f\t%5.4f\n', i, Transition_Time);
     
    end
     
    fclose(fid);
    N'utilise pas l'extension .m à tout va. Réserve la pour les fichiers contenant du code exécuté par MATLAB.
    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)

Discussions similaires

  1. [vb6] Récupérer les résultats d'un shell
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/06/2006, 16h57
  2. Réponses: 2
    Dernier message: 31/01/2006, 16h02
  3. Réponses: 5
    Dernier message: 05/10/2004, 13h05
  4. Réponses: 6
    Dernier message: 23/12/2003, 15h30
  5. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07

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