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 :

accéder à des variables partagées dans différents fichiers [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut accéder à des variables partagées dans différents fichiers
    Bonjour,
    Je vous expose mon problème, j'espère être claire, c'est un peu complexe.
    Je dispose de plusieurs fichiers comportant chacun 59 variables. Je dois sélectionner certains fichiers. Cette fonction fonctionne, à priori.
    Ensuite, je dois sélectionner les variables que je veux utiliser. Et là, c'est le drame

    Déjà, j'hésite entre 2 méthodes :
    1) créer un fichier où je réécris toutes mes données et j'utiliserai la fonction SORT, qui me permettra de trier mon nouveau fichier en fonction de ce que je veux "garder". (sachant que dans tous les cas, je devrai utiliser cette fonction SORT pour ordonner mes données pour former des groupes ultérieurement )

    2) travailler directement avec les fonctions que j'ai déjà. J'ai utilisé setappdata et getappdata pour travailler sur mes données.
    Dans ce cas, je pense initialiser toutes mes variables dans ma fonction function fisherdiscriminantanalysis_OpeningFcn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function fisherdiscriminantanalysis_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    values = getappdata(handles.figure1,'Data');
    for i=1:59
         handles.var{i}=%la colonne i de tous les fichiers séectionnés
                             %je n'arrive pas à le coder encore!
    end
    Et ensuite, je sélectionne les variables que je veux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function listbox1_Callback(hObject, eventdata, handles)
    handles.current_data = get(hObject,'Value');
    values = getappdata(handles.figure1,'Data');
     
    for i_data = 1:length(handles.current_data)
        values.value(i_data)
        %plot(values.value(i_data),'.'); //aucun des plot ne marche
       %peut-être à cause de la déclaration ratée de handles.var dans la fonction précédente
         %plot(handles.var{handles.current_data(i_data)},'.');
    end
     
    guidata(hObject,handles);
    Voici la structure de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    data = struct('name', [], 'file', [], 'value', []);
    Voilà, je crois que j'ai fourni toutes les informations utiles.
    Donc je voudrais savoir quelle méthode serait la plus facile, ou la plus propre
    Merci pour vos avis !

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Pour la gestion des variables (relatives à des fichiers), le plus simple (et pertinent) selon moi est de charger les fichiers au début, travailler autant que possible sur les variables uniquement et sauvegarder dans des fichiers lorsque le traitement est fini.
    Dans ton cas, comme tu as tes données sauvegardées dans le workspace (avec SETAPPDATA), il te suffit de faire passer aux différentes fonctions le handle du workspace où sont sauvegardés tes variables pour pouvoir y accéder (les modifier et les sauvegarder).

    Un petit exemple succint:

    Création (chargement) des données dans une première fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function mainInterface(varargin)
     
    ...
     
    setappdata(handles.mainInterface, 'Data', data);
     
    ...
     
    % Appel d'une autre interface (ou d'une fonction quelconque)
    secondInterface(handles.mainInterface);
    Et dans la seconde fonction (ou interface), il suffit de récupérer le handle et de charger les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function secondInterface(main_fig_hdl)
     
    ...
     
    data = getappdata(main_fig_hdl, 'Data');
     
    ...
    Voilà, j'espère que ca répond à ta question

    Bon courage,
    Duf

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Oui, merci ça répond à ma question. Je vois l'idée grâce à l'exemple.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function filepushbutton_Callback(hObject, eventdata, handles)
    [filename, pathname, filterindex] = uigetfile( ...
    {  '*.mat','MAT-files (*.mat)'; ...
       '*.*',  'All Files (*.*)'}, ...
       'Pick a file', ...
       'MultiSelect', 'on');
    filename
    % Création de la structure de données (initialisation)
    data = struct('name', [], 'file', [], 'value', []);
     
    % Sauvegarde dans le workspace de la fenêtre
    setappdata(handles.filepushbutton_Callback, 'Data', data);
     
    for i_file = 1:length(filename) 
        data = getappdata(handles.figure1, 'Data');
        data.file = fullfile(pathname, filename{i_file});
        data.value = load(data.file);
        data.file
        % Sauvegarde dans le workspace de la fenêtre
        setappdata(handles.figure1, 'Data', data);
    end
    data.value.JTLdata1
    %Successful execution of uigetfile does not open a file; it only returns the name of an existing file that the user designates.
     
    listbox1_Callback(hObject, eventdata, handles.filepushbutton_Callback)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function listbox1_Callback(hObject, eventdata, figure1)
    handles.current_data = get(hObject,'Value');
    data = getappdata(figure1,'Data');
     
    for i_data = 1:length(handles.current_data)
        data.value(i_data)
    end
     
    guidata(hObject,handles);
    J'obtiens cette erreur :
    filename =

    'JTL_julk2.mat' 'JTL_julk1.mat'

    ??? Reference to non-existent field 'filepushbutton_Callback'.

    Error in ==> fisherdiscriminantanalysis>filepushbutton_Callback at 57
    setappdata(handles.filepushbutton_Callback, 'Data', data);

    Error in ==> gui_mainfcn at 75
    feval(varargin{:});

    Error in ==> fisherdiscriminantanalysis at 34
    gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.
    J'appelle la fonction listbox1_Callback depuis filepushbutton_Callback car dans filepushbutton_Callback, j'ai chargé les données, mais ça me semble bizarre d'appeler la fonction sélectionnant les variables dans celle sélectionnant les fichiers. J'ai l'impression que ma sélection de fichiers ne peut alors pas se finir avant la sélection des variables

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    En fait tu confonds les noms de fonctions et les Tags des objets

    Pour sauvegarder les données avec SETAPPDATA (et les charger avec GETAPPDATA), on utilise en général le handle de la figure (dans ton cas handles.figure1)

    D'ailleurs tu fais ca correctement un peu plus bas dans ta fonction filepushbutton_Callback.

    De plus, tu as oublié le handles. lors du chargement des données dans listbox1_Callback

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par duf42 Voir le message
    En fait tu confonds les noms de fonctions et les Tags des objets
    Je ne crois pas les confondre, je ne sais pas quand utiliser l'un et quand l'autre :s
    Je crois que j'arriverais pas à bout de ce projet si je ne comprends pas bien ça. Sais-tu où je pourrais trouver des explications claires sur l'utilisation du handles et son utilisation en tant que paramètre? ( soit je trouve des exemples trop simples qui m'aident pas à comprendre, soit trop complexes et je ne comprends rien )

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    J'ai repris ton code et corriger en rouge (à comparer avec le code d'origine)

    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
    function filepushbutton_Callback(hObject, eventdata, handles)
    [filename, pathname, filterindex] = uigetfile( ...
    {  '*.mat','MAT-files (*.mat)'; ...
       '*.*',  'All Files (*.*)'}, ...
       'Pick a file', ...
       'MultiSelect', 'on');
    filename
    % Création de la structure de données (initialisation)
    data = struct('name', [], 'file', [], 'value', []);
    
    % Sauvegarde dans le workspace de la fenêtre
    setappdata(handles.figure1, 'Data', data);
    
    for i_file = 1:length(filename) 
        data = getappdata(handles.figure1, 'Data');
        data.file = fullfile(pathname, filename{i_file});
        data.value = load(data.file);
        data.file
        % Sauvegarde dans le workspace de la fenêtre
        setappdata(handles.figure1, 'Data', data);
    end
    data.value.JTLdata1
    %Successful execution of uigetfile does not open a file; it only returns the name of an existing file that the user designates.
    
    listbox1_Callback(hObject, eventdata, handles.filepushbutton_Callback)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function listbox1_Callback(hObject, eventdata, figure1)
    handles.current_data = get(hObject,'Value');
    data = getappdata(handles.figure1,'Data');
    
    for i_data = 1:length(handles.current_data)
        data.value(i_data)
    end
    
    guidata(hObject,handles);

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Merci beaucoup pour ton aide! et ta patience
    Dans l'appel de la fonction listbox1_Callback(hObject, eventdata, handles.filepushbutton_Callback), est-ce : listbox1_Callback(hObject, eventdata, handles.figure1) ?

    Avec listbox1_Callback(hObject, eventdata, handles.figure1) et le code que tu m'as fourni, j'ai :

    ??? Reference to non-existent field 'figure1'.

    Error in ==> fisherdiscriminantanalysis>listbox1_Callback at 157
    data = getappdata(handles.figure1,'Data');

    Error in ==> fisherdiscriminantanalysis>filepushbutton_Callback at 71
    listbox1_Callback(hObject, eventdata, handles.figure1)

    Error in ==> gui_mainfcn at 75
    feval(varargin{:});

    Error in ==> fisherdiscriminantanalysis at 34
    gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.
    alors figure1 est un tag, le tag de la fenêtre que je créé. C'est effectivement pas un des champs de la structure data. Je ne sais pas pourquoi il y a un problème avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = getappdata(handles.figure1,'Data');
    vu que j'utilise exactement ça dans la première fonction, sans que ça me fasse d'erreur.

  8. #8
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oups j'avais pas vu cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    listbox1_Callback(hObject, eventdata, handles)
    Dsl , faut que j'aille me coucher moi...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Merci!
    Finalement, mon prof m'a dit de ne pas utiliser les fonctions set/getappdata, que je pouvais faire avec le handles ... Il est censé m'aider un peu demain...
    J'espère que ça avancera, j'attends de voir!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Me revoilà avec un code qui ne marche toujours pas
    Alors, je me suis débarrassée des fonctions set/getappdata et de la structure de données. A présent, je mets dans une seule variable les fichiers que je concatène au fur et à mesure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function filepushbutton_Callback(hObject, eventdata, handles)
    [filename, pathname, filterindex]=uigetfile( {'*.mat','MAT-files (*.mat)';'*.*','All Files (*.*)'},'Pick a file',  'MultiSelect', 'on');
    filename
     
    for i_file = 1:length(filename) 
        file = fullfile(pathname, filename{i_file});
        temp = load(file);
       data=[data;temp];
       data
    end
    handles.data=data;
     
    guidata(hObject,handles);
    J'initialise mon data dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function fisherdiscriminantanalysis_OpeningFcn(hObject, eventdata, handles, varargin) 
    data=[];
    handles.output = hObject;
    guidata(hObject, handles);
    Mais voilà, la concaténation ne marche pas!
    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
     
    filename = 
     
        'JTL_julk2.mat'    'JTL_julk1.mat'
     
     
    data = 
     
        JTLdata2: [6x59 double]
     
    ??? Error using ==> vertcat
    CAT arguments are not consistent in structure field names.
     
    Error in ==> fisherdiscriminantanalysis>filepushbutton_Callback at 57
       data=[data;temp];
     
    Error in ==> gui_mainfcn at 75
            feval(varargin{:});
     
    Error in ==> fisherdiscriminantanalysis at 32
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uicontrol Callback.
    Le problème c'est que mes fichiers sont des .mat et qu'avec le load, j'obtiens une struct array, ce qui fait que les commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    s=load(file)
    s{1,1} ou s{1}
     
    s = 
     
        JTLdata1: [6x59 double]
     
    >> s{1,1}
    ??? Cell contents reference from a non-cell array object.
     
    >> s{1}
    ??? Cell contents reference from a non-cell array object.
    ne marchent pas.

    Alors que la commande fonctionne.
    Donc mon problème, c'est que je sais pas comment atteindre mes variables (par exemple JTLdata1 dans mon premier fichier)

    J'ai cherché avec mon prof aujourd'hui, puisqu'il m'a dit de faire comme ça, mais il a pas pu me trouver de solution et ma deadline est lundi, je n'ai toujours rien à rendre

    Quelqu'un voit-il un moyen de résoudre ce problème ?

  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 830
    Points
    14 830
    Par défaut
    Pourquoi ne crées-tu pas ta structure data comme indiqué dans ton premier post ? (avec les champs name, file, value)
    Ainsi cela te permettrait de concaténer sans problème.

    Et pour comprendre mieux le fonctionnement de LOAD : lorsque tu l'utilises avec un argument de sortie il te renvoie une structure qui à comme champs les noms des variables contenues dans le fichier.

    Si tu es sur de n'avoir qu'une variable dans chaque fichier tu peux donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    temp=load(file);
    data.name = cellstr(fieldnames(temp));%le nom du champ est le nom de la variable
    data.value = temp.(data.name);%utilisation des champs dynamiques

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Je ne sais pas si dans mon cas une structure de données est utile : une fois que je réussirais à sauvegarder les données, sélectionnées dans les fichiers, dans une seule variable (ici data en l'occurence), je ne me servirai plus du tout des fichiers, mais seulement de data.

    Dans chaque fichier, j'ai tout un tas de données.
    Par exemple, dans mon premier fichier, j'ai une seule variable JTLdata1
    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
    load('C:\Documents and Settings\jane\Bureau\projetmatlab\JTLdata\JTL_julk1.mat');
    >> whos
      Name           Size                    Bytes  Class
     
      JTLdata1       6x59                     2832  double array
     
    Grand total is 354 elements using 2832 bytes
     
    >> JTLdata1
     
    JTLdata1 =
     
      1.0e+003 *
     
      Columns 1 through 12 
     
        0.5944    0.5985    0.5610    0.5748    0.5762    0.3502    0.6315    0.6177    0.6448    0.5328    0.5510    0.4856
        0.6588    0.6678    0.5261    0.5617    0.5822    0.3858    0.6572    0.6537    0.6680    0.6034    0.6080    0.5251
        1.0226    1.0055    0.6096    0.6091    0.7319    0.5921    0.9515    1.0108    0.9225    0.9294    0.9180    0.8176
        0.5855    0.5896    0.5430    0.5634    0.5658    0.3399    0.6136    0.5984    0.6339    0.5254    0.5401    0.4763
        1.0131    0.9878    0.5546    0.5659    0.7029    0.5858    0.9076    0.9593    0.9069    0.9296    0.9088    0.7899
        0.6890    0.6998    0.5383    0.5785    0.6072    0.4075    0.6875    0.6873    0.6933    0.6340    0.6363    0.5487
    Alors est-ce qu'une structure de données est vraiment utile?

  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 830
    Points
    14 830
    Par défaut
    Justement la structure de données te permettra d'enregistrer toutes tes données dans une seule variable tout en gardant en mémoire leur nom.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Ok, merci pour l'explication. Voilà ma fonction modifiée :
    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
     
    [filename, pathname, filterindex]=uigetfile( {'*.mat','MAT-files (*.mat)';'*.*','All Files (*.*)'},'Pick a file',  'MultiSelect', 'on');
    filename
     
    data = struct('name', [], 'file', [], 'value', []);
     
    for i_file = 1:length(filename) 
        file = fullfile(pathname, filename{i_file});
        temp = load(file);
        data.name = cellstr(fieldnames(temp));
        data.name
        data.value = temp.(data.name);%utilisation des champs dynamiques
        data.value
        data=[data.value;temp];
        data
     
    end
    handles.data=data;
    guidata(hObject,handles);
    Alors, il y a du progrès , le nom de la variable s'affiche grâce à
    cellstr(fieldnames(temp));
    mais il y a un problème dans
    temp.(data.name)
    Message d'erreur :
    filename =

    'JTL_julk2.mat' 'JTL_julk1.mat'


    ans =

    'JTLdata2'

    ??? Argument to dynamic structure reference must evaluate to a valid field name.

    Error in ==> fisherdiscriminantanalysis>filepushbutton_Callback at 59
    data.value = temp.(data.name);%utilisation des champs dynamiques

    Error in ==> gui_mainfcn at 75
    feval(varargin{:});

    Error in ==> fisherdiscriminantanalysis at 32
    gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.
    Je ne comprends pas bien cette syntaxe temp.(data.name). On veut accéder aux noms des variables contenues dans temp?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    temp = 
    JTLdata2: [6x59 double]
    Et je ne vois pas bien la différence entre mes champs name et value. Est-ce que name, c'est par exemple 'JTLdata2' et value, ce sont les valeurs du fichier?

    Merci

  15. #15
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Le champ data.name est un cell array or pour utiliser les champs dynamiques, il faut un string, il faudrait donc écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    temp.(data.name{1})
    Le fonctionnement des champs dynamiques est relativement simple (en terme d'utilisation en tout cas):
    est équivalent à:
    Il est bien évident que dans cet exemple ca n'a aucun intérêt mais si le string 'toto' est contenu dans une variable, ca devient intéressant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test = 'toto';
    temp.(test)
    J'espère t'avoir un peu éclairci l'horizon...

    Bon courage,
    Duf

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    Oui, merci, ça m'aide un peu

    A présent, le data value lorsque i_file=1 à l'air de marcher mais le programme s'arrête lors de data.value = temp.(data.name{2}); J'ai fait plusieurs affichages pour le voir
    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
     
    data = struct('name', [], 'file', [], 'value', []);
     
    donnees=[];
     
    for i_file = 1:length(filename) 
        file = fullfile(pathname, filename{i_file});
        temp = load(file);
        temp
        donnees
        data.name = fieldnames(temp);%le nom du champ est le nom de la variable
        data.name
        data.value = temp.(data.name{i_file});%utilisation des champs dynamiques
        disp('data value')
        data.value
        donnees=[donnees;data.value];
        %data=[data.value;temp];
        donnees
     
    end
    handles.data=data;
    %data.value.JTLdata1
    guidata(hObject,handles);
    Il semblerait que ce soit un problème de dimension de matrice. Ceci dit, je vois pas pourquoi, puisque je n'ai pas spécifié de dimension et je crois pas essayer d'accéder à certains indices ...

    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
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
     
    filename = 
     
        'JTL_julk2.mat'    'JTL_julk1.mat'
     
     
    temp = 
     
        JTLdata2: [6x59 double]
     
     
    donnees =
     
         []
     
     
    ans = 
     
        'JTLdata2'
     
    data value
     
    ans =
     
      1.0e+003 *
     
      Columns 1 through 12 
     
        0.6673    0.6965    0.6551    0.6571    0.6630    0.4084    0.7193    0.7041    0.7346    0.5952    0.6152    0.5577
        0.7495    0.7903    0.6174    0.6562    0.6807    0.4405    0.7583    0.7503    0.7724    0.6887    0.6911    0.6122
        1.1580    1.1346    0.6481    0.6398    0.7990    0.6700    1.0558    1.1324    1.0311    1.0521    1.0317    0.9231
        0.6731    0.7160    0.6561    0.6810    0.6868    0.3907    0.7266    0.6963    0.7503    0.6116    0.6232    0.5593
        1.1546    1.1371    0.6194    0.6189    0.7889    0.6637    1.0335    1.1050    1.0265    1.0571    1.0293    0.9041
        0.7967    0.8602    0.6481    0.6985    0.7313    0.4652    0.8041    0.7992    0.8223    0.7439    0.7456    0.6487
     
      Columns 13 through 24 
     
        0.6004    0.6729    0.6727    0.5747    0.5643    0.7596    0.6745    0.7494    0.6406    0.4932    0.5776    0.6536
        0.6088    0.7478    0.6937    0.5655    0.6019    0.8159    0.7073    0.7635    0.6826    0.4817    0.6303    0.6503
        0.7433    1.0976    0.8884    0.6635    0.8686    1.1955    1.0172    0.8731    0.9527    0.5228    0.9259    0.7726
        0.5964    0.6764    0.6706    0.5726    0.5695    0.7519    0.6807    0.7652    0.6417    0.4941    0.5929    0.6535
        0.7236    1.0954    0.8488    0.6377    0.8518    1.1809    0.9912    0.8291    0.9514    0.5018    0.9154    0.7663
        0.6357    0.7935    0.7265    0.5939    0.6437    0.8653    0.7568    0.7983    0.7316    0.5102    0.6801    0.6803
     
      Columns 25 through 36 
     
        0.5998    0.5624    0.5337    0.7084    0.7516    0.6862    0.7071    0.6982    0.6723    0.6682    0.5843    0.7652
        0.6324    0.6431    0.5334    0.7576    0.7763    0.7625    0.7225    0.7266    0.7272    0.6256    0.5280    0.8385
        0.9176    1.1071    0.7248    1.0942    0.8631    1.1159    0.9189    0.9992    1.0442    0.7675    0.4992    1.1834
        0.5964    0.5515    0.5233    0.7200    0.7646    0.6923    0.7212    0.6898    0.6718    0.6417    0.5899    0.7738
        0.8944    1.0754    0.6908    1.0762    0.8585    1.0790    0.8843    0.9631    1.0457    0.7117    0.4936    1.1896
        0.6715    0.6911    0.5556    0.8057    0.8133    0.8126    0.7601    0.7666    0.7768    0.6444    0.5650    0.8922
     
      Columns 37 through 48 
     
        0.5850    0.5219    0.7126    0.5570    0.7761    0.4976    0.7405    0.5637    0.7445    0.7377    0.6454    0.6506
        0.6770    0.5746    0.6954    0.5679    0.7819    0.5374    0.7715    0.5587    0.7302    0.8114    0.6758    0.6737
        0.9848    0.7919    0.7734    0.7392    0.8745    0.7772    0.9358    0.6622    0.8466    1.2327    0.9423    0.9050
        0.6078    0.5249    0.7154    0.5635    0.8000    0.4982    0.7496    0.5492    0.7516    0.7308    0.6418    0.6403
        0.9994    0.7638    0.7694    0.7343    0.8405    0.7437    0.9111    0.6258    0.8410    1.1995    0.9332    0.8863
        0.7377    0.6043    0.7302    0.6070    0.8210    0.5761    0.8099    0.5764    0.7746    0.8545    0.7175    0.7086
     
      Columns 49 through 59 
     
        0.7297    0.7745    0.8205    0.6428    0.8655    0.7265    0.6589    0.5752    0.7491    0.4616    0.0010
        0.7528    0.7995    0.8781    0.6376    0.9231    0.8023    0.7144    0.5570    0.7620    0.5410    0.0020
        1.1879    0.9746    1.1436    0.8908    1.3141    1.0882    1.0566    0.5182    0.9223    0.9343    0.0040
        0.7031    0.7989    0.8391    0.6286    0.8779    0.7395    0.6635    0.5760    0.7609    0.4479    0.0010
        1.1536    0.9551    1.1034    0.8635    1.3093    1.0786    1.0490    0.5071    0.9154    0.9269    0.0050
        0.7890    0.8522    0.9278    0.6661    0.9804    0.8549    0.7733    0.5710    0.8102    0.5778    0.0030
     
     
    donnees =
     
      1.0e+003 *
     
      Columns 1 through 12 
     
        0.6673    0.6965    0.6551    0.6571    0.6630    0.4084    0.7193    0.7041    0.7346    0.5952    0.6152    0.5577
        0.7495    0.7903    0.6174    0.6562    0.6807    0.4405    0.7583    0.7503    0.7724    0.6887    0.6911    0.6122
        1.1580    1.1346    0.6481    0.6398    0.7990    0.6700    1.0558    1.1324    1.0311    1.0521    1.0317    0.9231
        0.6731    0.7160    0.6561    0.6810    0.6868    0.3907    0.7266    0.6963    0.7503    0.6116    0.6232    0.5593
        1.1546    1.1371    0.6194    0.6189    0.7889    0.6637    1.0335    1.1050    1.0265    1.0571    1.0293    0.9041
        0.7967    0.8602    0.6481    0.6985    0.7313    0.4652    0.8041    0.7992    0.8223    0.7439    0.7456    0.6487
     
      Columns 13 through 24 
     
        0.6004    0.6729    0.6727    0.5747    0.5643    0.7596    0.6745    0.7494    0.6406    0.4932    0.5776    0.6536
        0.6088    0.7478    0.6937    0.5655    0.6019    0.8159    0.7073    0.7635    0.6826    0.4817    0.6303    0.6503
        0.7433    1.0976    0.8884    0.6635    0.8686    1.1955    1.0172    0.8731    0.9527    0.5228    0.9259    0.7726
        0.5964    0.6764    0.6706    0.5726    0.5695    0.7519    0.6807    0.7652    0.6417    0.4941    0.5929    0.6535
        0.7236    1.0954    0.8488    0.6377    0.8518    1.1809    0.9912    0.8291    0.9514    0.5018    0.9154    0.7663
        0.6357    0.7935    0.7265    0.5939    0.6437    0.8653    0.7568    0.7983    0.7316    0.5102    0.6801    0.6803
     
      Columns 25 through 36 
     
        0.5998    0.5624    0.5337    0.7084    0.7516    0.6862    0.7071    0.6982    0.6723    0.6682    0.5843    0.7652
        0.6324    0.6431    0.5334    0.7576    0.7763    0.7625    0.7225    0.7266    0.7272    0.6256    0.5280    0.8385
        0.9176    1.1071    0.7248    1.0942    0.8631    1.1159    0.9189    0.9992    1.0442    0.7675    0.4992    1.1834
        0.5964    0.5515    0.5233    0.7200    0.7646    0.6923    0.7212    0.6898    0.6718    0.6417    0.5899    0.7738
        0.8944    1.0754    0.6908    1.0762    0.8585    1.0790    0.8843    0.9631    1.0457    0.7117    0.4936    1.1896
        0.6715    0.6911    0.5556    0.8057    0.8133    0.8126    0.7601    0.7666    0.7768    0.6444    0.5650    0.8922
     
      Columns 37 through 48 
     
        0.5850    0.5219    0.7126    0.5570    0.7761    0.4976    0.7405    0.5637    0.7445    0.7377    0.6454    0.6506
        0.6770    0.5746    0.6954    0.5679    0.7819    0.5374    0.7715    0.5587    0.7302    0.8114    0.6758    0.6737
        0.9848    0.7919    0.7734    0.7392    0.8745    0.7772    0.9358    0.6622    0.8466    1.2327    0.9423    0.9050
        0.6078    0.5249    0.7154    0.5635    0.8000    0.4982    0.7496    0.5492    0.7516    0.7308    0.6418    0.6403
        0.9994    0.7638    0.7694    0.7343    0.8405    0.7437    0.9111    0.6258    0.8410    1.1995    0.9332    0.8863
        0.7377    0.6043    0.7302    0.6070    0.8210    0.5761    0.8099    0.5764    0.7746    0.8545    0.7175    0.7086
     
      Columns 49 through 59 
     
        0.7297    0.7745    0.8205    0.6428    0.8655    0.7265    0.6589    0.5752    0.7491    0.4616    0.0010
        0.7528    0.7995    0.8781    0.6376    0.9231    0.8023    0.7144    0.5570    0.7620    0.5410    0.0020
        1.1879    0.9746    1.1436    0.8908    1.3141    1.0882    1.0566    0.5182    0.9223    0.9343    0.0040
        0.7031    0.7989    0.8391    0.6286    0.8779    0.7395    0.6635    0.5760    0.7609    0.4479    0.0010
        1.1536    0.9551    1.1034    0.8635    1.3093    1.0786    1.0490    0.5071    0.9154    0.9269    0.0050
        0.7890    0.8522    0.9278    0.6661    0.9804    0.8549    0.7733    0.5710    0.8102    0.5778    0.0030
     
     
    temp = 
     
        JTLdata1: [6x59 double]
     
     
    donnees =
     
      1.0e+003 *
     
      Columns 1 through 12 
     
        0.6673    0.6965    0.6551    0.6571    0.6630    0.4084    0.7193    0.7041    0.7346    0.5952    0.6152    0.5577
        0.7495    0.7903    0.6174    0.6562    0.6807    0.4405    0.7583    0.7503    0.7724    0.6887    0.6911    0.6122
        1.1580    1.1346    0.6481    0.6398    0.7990    0.6700    1.0558    1.1324    1.0311    1.0521    1.0317    0.9231
        0.6731    0.7160    0.6561    0.6810    0.6868    0.3907    0.7266    0.6963    0.7503    0.6116    0.6232    0.5593
        1.1546    1.1371    0.6194    0.6189    0.7889    0.6637    1.0335    1.1050    1.0265    1.0571    1.0293    0.9041
        0.7967    0.8602    0.6481    0.6985    0.7313    0.4652    0.8041    0.7992    0.8223    0.7439    0.7456    0.6487
     
      Columns 13 through 24 
     
        0.6004    0.6729    0.6727    0.5747    0.5643    0.7596    0.6745    0.7494    0.6406    0.4932    0.5776    0.6536
        0.6088    0.7478    0.6937    0.5655    0.6019    0.8159    0.7073    0.7635    0.6826    0.4817    0.6303    0.6503
        0.7433    1.0976    0.8884    0.6635    0.8686    1.1955    1.0172    0.8731    0.9527    0.5228    0.9259    0.7726
        0.5964    0.6764    0.6706    0.5726    0.5695    0.7519    0.6807    0.7652    0.6417    0.4941    0.5929    0.6535
        0.7236    1.0954    0.8488    0.6377    0.8518    1.1809    0.9912    0.8291    0.9514    0.5018    0.9154    0.7663
        0.6357    0.7935    0.7265    0.5939    0.6437    0.8653    0.7568    0.7983    0.7316    0.5102    0.6801    0.6803
     
      Columns 25 through 36 
     
        0.5998    0.5624    0.5337    0.7084    0.7516    0.6862    0.7071    0.6982    0.6723    0.6682    0.5843    0.7652
        0.6324    0.6431    0.5334    0.7576    0.7763    0.7625    0.7225    0.7266    0.7272    0.6256    0.5280    0.8385
        0.9176    1.1071    0.7248    1.0942    0.8631    1.1159    0.9189    0.9992    1.0442    0.7675    0.4992    1.1834
        0.5964    0.5515    0.5233    0.7200    0.7646    0.6923    0.7212    0.6898    0.6718    0.6417    0.5899    0.7738
        0.8944    1.0754    0.6908    1.0762    0.8585    1.0790    0.8843    0.9631    1.0457    0.7117    0.4936    1.1896
        0.6715    0.6911    0.5556    0.8057    0.8133    0.8126    0.7601    0.7666    0.7768    0.6444    0.5650    0.8922
     
      Columns 37 through 48 
     
        0.5850    0.5219    0.7126    0.5570    0.7761    0.4976    0.7405    0.5637    0.7445    0.7377    0.6454    0.6506
        0.6770    0.5746    0.6954    0.5679    0.7819    0.5374    0.7715    0.5587    0.7302    0.8114    0.6758    0.6737
        0.9848    0.7919    0.7734    0.7392    0.8745    0.7772    0.9358    0.6622    0.8466    1.2327    0.9423    0.9050
        0.6078    0.5249    0.7154    0.5635    0.8000    0.4982    0.7496    0.5492    0.7516    0.7308    0.6418    0.6403
        0.9994    0.7638    0.7694    0.7343    0.8405    0.7437    0.9111    0.6258    0.8410    1.1995    0.9332    0.8863
        0.7377    0.6043    0.7302    0.6070    0.8210    0.5761    0.8099    0.5764    0.7746    0.8545    0.7175    0.7086
     
      Columns 49 through 59 
     
        0.7297    0.7745    0.8205    0.6428    0.8655    0.7265    0.6589    0.5752    0.7491    0.4616    0.0010
        0.7528    0.7995    0.8781    0.6376    0.9231    0.8023    0.7144    0.5570    0.7620    0.5410    0.0020
        1.1879    0.9746    1.1436    0.8908    1.3141    1.0882    1.0566    0.5182    0.9223    0.9343    0.0040
        0.7031    0.7989    0.8391    0.6286    0.8779    0.7395    0.6635    0.5760    0.7609    0.4479    0.0010
        1.1536    0.9551    1.1034    0.8635    1.3093    1.0786    1.0490    0.5071    0.9154    0.9269    0.0050
        0.7890    0.8522    0.9278    0.6661    0.9804    0.8549    0.7733    0.5710    0.8102    0.5778    0.0030
     
     
    ans = 
     
        'JTLdata1'
     
    ??? Index exceeds matrix dimensions.
     
    Error in ==> fisherdiscriminantanalysis>filepushbutton_Callback at 62
        data.value = temp.(data.name{i_file});%utilisation des champs dynamiques
     
    Error in ==> gui_mainfcn at 75
            feval(varargin{:});
     
    Error in ==> fisherdiscriminantanalysis at 32
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uicontrol Callback.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Points : 97
    Points
    97
    Par défaut
    ça y est, mon probmème est enfin résolu

    Merci à tous !
    Voilà le code final, si ça intéresse quelqu'un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    data=[];
     
    for i_file = 1:length(filename) 
        file = fullfile(pathname, filename{i_file});
        temp = load(file);
        name = fieldnames(temp);  
        value = getfield(temp, name{1});      
        data=[data;value];
        disp('data matrix :')
        data
     
    end

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

Discussions similaires

  1. Insérer des variables php dans un fichier xml
    Par Aezerium dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 21/02/2011, 11h24
  2. [AJAX] Rafraichir automatiquement des variables cgi dans un fichier htm
    Par lcoulon dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/10/2008, 16h43
  3. [PHP-JS] comment recupérer des variables javascript dans un fichier php
    Par domino_dj dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2007, 11h46
  4. portée des variables globales dans un fichier js
    Par crakazoid dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/04/2006, 16h49
  5. Réponses: 12
    Dernier message: 27/01/2006, 11h07

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