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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    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 éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    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 éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    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);

+ 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