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

Interfaces Graphiques Discussion :

Problème pour sauvegarder des données. [Débutant]


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Par défaut Problème pour sauvegarder des données.
    Bonjour à tous et à toutes,


    CONTEXTE :je réalise une interface graphique me permettant de lire un fichier excell, de récupérer tous les noms de colonnes (par exemple 'puissance' etc) et ensuite en cliquant dans un menu déroulant je sélectionne celles avec lesquelles je souhaite travailler (je peux tracer des courbes notamment). Jusque là aucun problème.

    Maintenant je souhaite sauvegarder toutes les variables (qui correspondent aux noms de colonnes) que l'utilisateur a sélectionné.

    Pour se faire j'ai essayé de faire ceci

    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
    % --- Executes on button press in pushbutton_sauvegarder_compresseur.
    function pushbutton_sauvegarder_compresseur_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton_sauvegarder_compresseur (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global file_name_choisi;  
    global nom_variable_x;  %nom_variable_x=get(handles.edit_abscisse,'string');
    global nom_variable_y;  %nom_variable_y=get(handles.edit_ordonnee,'string'); utilisé initialement dans une autre fonction callback
    global temps;
    global txt;  %[data,txt] = xlsread (file_name_choisi,sheet_name); pour lire le fichier excell
    global data; %voir commentaire précédent
     
    nombre_variable_edit_abscisse=size(nom_variable_x);
    nombre_variable_edit_ordonnee=size(nom_variable_y);
     
    for z=2:max(nombre_variable_edit_abscisse,nombre_variable_edit_ordonnee); 
     
        %%%%%%%%%%%%%%%%%match colonne abscisse%%%%%%%%%%%%%%%%%%%%%
     
        match_txt=strcmp (nom_variable_x(z), txt);
        size_match_txt=size(match_txt);
        i=1;
        j=1;
        while i<= size_match_txt(1)
            while j<= size_match_txt(2)
                if match_txt(i,j)==1
                    nom_variable_a_sauvegarder_x.name=nom_variable_x(z)
                    nom_variable_a_sauvegarder_x.value=data(:,j-1)
                    eval([ nom_variable_a_sauvegarder_x '_' z ';']) 
                end
     
                j=j+1;
            end
            i=i+1;
            j=1;
        end;
     
     
        %%%%%%%%%%%%%%%match colonne ordonnée%%%%%%%%%%%%%%%%%%%%%
        match_txt=strcmp (nom_variable_y(z), txt);
        size_match_txt=size(match_txt);
        i=1;
        j=1;
        while i<= size_match_txt(1)
            while j<= size_match_txt(2)
                if match_txt(i,j)==1
                    nom_variable_a_sauvegarder_y.name=nom_variable_y(z)
                    nom_variable_a_sauvegarder_y.value=data(:,j-1)
                    eval([ nom_variable_a_sauvegarder_y '_' z ';'])
                end
                j=j+1;
            end
            i=i+1;
            j=1;
        end;
     
    end;

    j'aurais donc aimé sauvegarder tous les nom_variable_a_sauvegarder_y et nom_variable_a_sauvegarder_x correspondant aux sélection des variables à tracer que l'utilisateur a demandé. Et j'aurais voulu que l'utilisateur puisse choisir le nom qu'il souhaite donner à cet ensemble de variables en sauvegardant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    t=temps;
    Rep='D:\enregistrement MatLab';
    Nom='file_name_choisi';
    [Nom,Rep]=uiputfile([Rep,Nom],'Sauvegarde des données');
    if Nom~=0
        eval(['save ',Rep,Nom,' t y x'])
    end
    EDIT: J'oubliais, visiblement cela ne fonctionne pascar je n'ai pas le droit d'utiliser la commande eval([ nom_variable_a_sauvegarder_x '_' z ';']) pour des structures, j'obtiens donc le message d'erreur 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
    ??? Error using ==> horzcat
    The following error occurred converting from char to struct:
    Error using ==> struct
    Conversion to struct from char is not possible.
    
    Error in ==>
    selection_donnee_trace_compresseur>pushbutton_sauvegarder_compresseur_Callback
    at 149
                    eval([ nom_variable_a_sauvegarder_x '_' z ';'])
    
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
    
    Error in ==> selection_donnee_trace_compresseur at 43
    Auriez vous des idées pour arriver à faire ce que je souhaite, ou même de me permettre de simplifier mon code puisque n'ayant que peu d'expérience je doute avoir pris le chemin le plus aisé pour arriver à mes fins avec cette fonction sauvegarder

    Je vous remercie d'avance d'avoir pris le temps de lire se message et je vous souhaite une bonne journée.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Variables globales, eval, on peut dire que tu cumules les mauvaises pratiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rep='D:\enregistrement MatLab';
    Nom='file_name_choisi';
    [Nom,Rep]=uiputfile([Rep,Nom],'Sauvegarde des données');
    [Rep,Nom] va donner la chaîne D:\enregistrement MatLabfile_name_choisi...
    Est-ce vraiment ce que tu souhaites ? Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\enregistrement MatLab\file_name_choisi
    ?
    Je te conseille la lecture de ce sujet de la FAQ.

    Je ne comprends pas but de cette ligne eval([ nom_variable_a_sauvegarder_x '_' z ';']) ?
    Ici le problème est que tu essaies de concaténer une structure, un caractère, et une valeur numérique. De plus même si cela passe, cette ligne n'a aucun intérêt : tu n'utilises jamais son résultat.

    Concernant l'utilisation d'eval avec save, je te conseille cette lecture.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Par défaut
    Bonjour =),

    J'avoue je cumule les mauvaises pratiques bien que j'ai lu les avertissements à ces sujets dans la FAQ. :p

    Effectivement il manque le \ dans la ligne de code qui permet la sauvegarde:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\enregistrement MatLab\file_name_choisi
    mais je m'en serai rendu compte bien vite

    Là ou on entre plus dans le vif du sujet, l’intérêt de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval([ nom_variable_a_sauvegarder_x '_' z ';'])
    (si cela fonctionnait!) est de pouvoir récupérer dans une structure, les noms de variables sélectionnés ainsi que value (qui correspond à la colonne de données). Le fait de l'incrémenter suivant z me permet de ne pas écraser à chaque retour dans la boucle un nom de variable et sa valeur que je souhaiterais sauvegarder par la suite.

    Tu n'as pas vu l’intérêt de cette ligne car je n'ai pas encore fait la sauvegarde de ses structures. En effet lorsque j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(['save ',Rep,Nom,' t y x'])

    je voudrais qu'à la place de x et y il y ait tous les nom_variable_a_sauvegarder_x_1
    nom_variable_a_sauvegarder_x_2
    nom_variable_a_sauvegarder_x_3
    nom_variable_a_sauvegarder_x_4
    ...
    nom_variable_a_sauvegarder_y_1
    etc...


    EDIT2:

    finalement, si j'utilise plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom_string_x=nom_variable_x(z)
    Nom_string_x=[Nom_string_x{:}] %convertir le cell array en string
    eval([Nom_string_x,'=data(:,j-1)']);
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval([ nom_variable_a_sauvegarder_x '_' z ';'])


    Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_variable_x(1)='blabla'
    j'obtiendrais une nouvelle variable Et c'est ce que je veux (je pensais avoir besoin de créer une structure (contenant le nom de la variable et le vecteur correspondant mais ce n'est pas la peine).

    Comment puis-je faire désormais pour sauver tous les vecteurs nom_variable_x(z) et nom_variable_y(z)?

    EDIT: mon dernier essai...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        for z=1:max(nombre_variable_edit_abscisse,nombre_variable_edit_ordonnee)-1;
            Nom_string_x=nom_variable_x(z);
            Nom_string_x=[Nom_string_x{:}];
            Nom_string_y=nom_variable_y(z);
            Nom_string_y=[Nom_string_y{:}];
        eval(['save ',Rep,Nom,'t eval(nom_string_x) eval(nom_string y)'])
        end;


    Merci de ton aide. j'en ai bien besoin

    Justa_noob_at_MatLab

  4. #4
    Invité
    Invité(e)
    Par défaut
    Trop d'eval tue eval

    Tu peux simplement utiliser des champs de structure dynamiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for ...
        nom_variable_x = ...
        s.(nom_variable_x) = data(:,j-1);
    end
    s.t = ...
    save(fullfile(Rep,Nom), '-struct', 's')

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Par défaut
    Bonjour Winjerôme, Bonjour tout le monde,

    Bon je sais que je m'entête avec les et que c'est une mauvaise chose mais ca fonctionne:

    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
    % hObject    handle to pushbutton_sauvegarder_compresseur (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global file_name_choisi;  
    global nom_variable_x;  %nom_variable_x=get(handles.edit_abscisse,'string');
    global nom_variable_y;  %nom_variable_y=get(handles.edit_ordonnee,'string'); utilisé initialement dans une autre fonction callback
    global temps;
    global txt;  %[data,txt] = xlsread (file_name_choisi,sheet_name); pour lire le fichier excell
    global data; %voir commentaire précédent
    nombre_variable_edit_abscisse=size(nom_variable_x);
    nombre_variable_edit_ordonnee=size(nom_variable_y);
              %    nom_variable_x
              %    nom_variable_y
     
    for z=2:nombre_variable_edit_abscisse(1); 
     
        %%%%%%%%%%%%%%%%%match colonne abscisse%%%%%%%%%%%%%%%%%%%%%
     
        match_txt=strcmp (nom_variable_x(z), txt);
        size_match_txt=size(match_txt);
        i=1;
        j=1;
        Data2Save='save([Rep,Nom],';
        while i<= size_match_txt(1)
            while j<= size_match_txt(2)
                if match_txt(i,j)==1
                   % nom_variable_a_sauvegarder_x.name=nom_variable_x(z);
                   % nom_variable_a_sauvegarder_x.value=data(:,j-1);
                   % nomFichier = sprintf('nom_variable_a_sauvegarder_x%d',z) 
                    Nom_string_x=nom_variable_x(z)
                    Nom_string_x=[Nom_string_x{:}]
                    eval([Nom_string_x,'=data(:,j);']);
                    Data2Save=[Data2Save,'''',Nom_string_x,''','];
     
                end
     
                j=j+1;
            end
            i=i+1;
            j=1;
        end;
    end;
     for z=2:nombre_variable_edit_ordonnee(1);   
     
        %%%%%%%%%%%%%%%match colonne ordonnée%%%%%%%%%%%%%%%%%%%%%
        match_txt=strcmp (nom_variable_y(z), txt);
        size_match_txt=size(match_txt);
        i=1;
        j=1;
        while i<= size_match_txt(1)
            while j<= size_match_txt(2)
                if match_txt(i,j)==1
                    Nom_string_y=nom_variable_y(z);
                    Nom_string_y=[Nom_string_y{:}];
                    eval([Nom_string_y,'=data(:,j);']);
                    Data2Save=[Data2Save,'''',Nom_string_y,''','];
     
                end
                j=j+1;
            end
            i=i+1;
            j=1;
        end;
     
    end;
     
    Data2Save=[Data2Save,'''t'')'];
    Data2Save
    t=temps;
     
    Rep='Z:\Stage ANR CHIC\donnees_Essais_CHIC\enregistrement MatLab\';
    Nom='file_name_choisi';
    [Nom,Rep]=uiputfile([Rep,Nom],'Sauvegarde des données');
     
    eval(Data2Save)

    Enfin presque, puisque je récupère des chaînes de caractères parfois composées de 2 mots. Alors là effectivement ca merdouille avec eval:

    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
    ??? Error using ==> eval
    Undefined function or method 'debit' for input arguments of type 'char'.
    
    Error in ==>
    selection_donnee_trace_compresseur>pushbutton_sauvegarder_compresseur_Callback
    at 153
                    eval([Nom_string_x,'=data(:,j);']);
    
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
    
    Error in ==> selection_donnee_trace_compresseur at 43
        gui_mainfcn(gui_State, varargin{:});
    
    Error in ==>
    @(hObject,eventdata)selection_donnee_trace_compresseur('pushbutton_sauvegarder_compresseur_Callback',hObject,eventdata,guidata(hObject))
    
     
    ??? Error while evaluating uicontrol Callback
    En effet eval evalue 'débit' au lieu de 'débit refoulement'

    Si quelqu'un a une idée, je suis preneur ^^. EDIT: Je sais ce que je vais faire, je vais supprimer les espace dans les chaînes de caractères et les remplacer par des _


    Bonne journée à tous les MATLAB USER ^^!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Si tu aimes te compliquer la vie

    La fonction genvarname pourra t'aider.

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

Discussions similaires

  1. [BO XIR2] Problème pour lier des données
    Par LaPanic dans le forum Deski
    Réponses: 3
    Dernier message: 10/02/2008, 17h04
  2. Problème pour sauvegarder mes données
    Par ploup dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/05/2007, 14h17
  3. [Tableaux] Problème pour modifier des données
    Par Oli_Ifre dans le forum Langage
    Réponses: 8
    Dernier message: 11/04/2007, 15h33
  4. [LDAP] problème pour récupérer des données
    Par Bizoo dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/04/2007, 09h09
  5. Problème pour rentrer des données dans MySQL
    Par Sandara dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/06/2006, 10h59

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