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 de tableau et d'indice


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut problème de tableau et d'indice
    Bonjour
    Voici le code que j'ai réussi a faire tant bien que mal :
    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
    % --------------------------------------------------------------------
    %save SEPARATELY selected .tdf-files in .mat-files
    function mnSavesel_Callback(hObject, eventdata, handles)
    global SmartData selTrials PathName FileName
    % hObject    handle to mnSavesel (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    %function SaveMATfile(Path, fName, SmartX)
    %h = waitbar(0, 'Please wait - saving data in .MAT file(s)...');
    if iscell(FileName)
        FileName
        selTrials{:}
      lenFN=length(selTrials)  
      for ii=1:lenFN
        k=selTrials(ii);
        k{ii}
        msg=['Please wait - save file ' strrep(FileName{k}, 'tdf', 'mat') '...']; 
        waitbar(ii/lenFN, h, msg);   
        SaveMATfile(PathName, FileName{k}, SmartData{k});
      end 
    else
        waitbar(0.4,h);
        SaveMATfile(PathName, FileName, SmartData{1});
    end    
    close(h)
    end
    %---------------------------------------------------------------------
    j'ai bien les trois noms de fichier que je souhaite, et les deux valeurs des fichiers sélectionnés dans k{ii}. Le problème c'est qu'il refuse de me faire sortir les éléments de k{ii} l'un apres l'autre dans la boucle, ce qui entraine un message d'erreur que voici :
    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
    FileName = 
     
        'Sol + tib+ WBR1.tdf'    'Sol + tib+ WBR2.tdf'    'Sol + tib+ WBR3.tdf'
     
     
    ans =
     
         1     3
     
     
    lenFN =
     
         1
     
     
    ans =
     
         1     3
     
    ??? Error using ==> subsindex
    Function 'subsindex' is not defined for values of class 'cell'.
     
    Error in ==> fileproc>mnSavesel_Callback at 921
        msg=['Please wait - save file ' strrep(FileName{k}, 'tdf', 'mat') '...'];
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uimenu Callback
    je n'ai toujours pas compris pourquoi "lenFN" était égale a 1 alors qu'il y a deux éléments, ni pourquoi il m'affiche les deux valeurs de k en même temps alors qu'il est indicé. Ce que je souhaite c'est qu'il fasse un enregistrement de chacun des fichiers sélectionnés séparéments selon le nombre d'enregistrement. J'espère m'être bien exprimé.
    Merci pur votre aide, car je troune en rond avec ces fichus tableaux !!

  2. #2
    Expert confirmé
    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
    Par défaut
    Il faudrait que tu nous dises ce que vaut selTrials et ce que c'est comme type.
    De plus manifestement k{ii} vaut [1 3] et est donc un vecteur, et k est de type cell.
    Donc FileName{k} ne correspond à rien (c'est là qu'est l'erreur), puisqu'ici k devrait être un entier (1,2 ou 3 dans le cas donné).
    Il faudrait donc plutôt (si je comprends tout) faire une boucle sur k{ii} pour sauver FileName{1} et FileName{3} :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for iterK=1:length(k{ii})
       msg=['Please wait - save file ' strrep(FileName{k{ii}(iterK)}, 'tdf', 'mat');
       SaveMATfile(PathName, FileName{k{ii}(iterK)}, SmartData{k});
    end
    Notes : je ne suis pas sure du coup de l'indice pour SmartData.
    Et je ne comprends pas bien pourquoi tu prends selTrials(ii) puis k{ii}.

    C'est un peu confus.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut [Débutant] je me fourvois entre les cellules et les tableau
    Rebonjour,
    J'ai modifié le code comme voici
    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
    % --------------------------------------------------------------------
    %save SEPARATELY selected .tdf-files in .mat-files
    function mnSavesel_Callback(hObject, eventdata, handles)
    global SmartData selTrials PathName FileName
    % hObject    handle to mnSavesel (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    %function SaveMATfile(Path, fName, SmartX)
    %h = waitbar(0, 'Please wait - saving data in .MAT file(s)...');
    if iscell(FileName)
        FileName
        selTrials
      lenFN=length({selTrials})
      for ii=1:lenFN
        k=selTrials{ii}
        k(ii)
        for iterK=1:length(k{ii})
        msg=['Please wait - save file ' strrep(FileName{k{ii}(iterK)}, 'tdf', 'mat')];
        SaveMATfile(PathName, FileName{k{ii}(iterK)}, SmartData{k});
        end
        %msg=['Please wait - save file ' strrep(FileName{k}, 'tdf', 'mat') '...']; 
        waitbar(ii/lenFN, h, msg);   
        %SaveMATfile(PathName, FileName{k}, SmartData{k});
      end 
    else
        waitbar(0.4,h);
        SaveMATfile(PathName, FileName, SmartData{1});
    end    
    close(h)
    end
    Mais j'ai toujours un message d'erreur entre les cellules et le tableau. Je suis désolé, je n'arrive pas a faire quelque chose qui tienne debout. Voici le message :
    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
    FileName = 
     
        'Sol + tib+ WBR1.tdf'    'Sol + tib+ WBR2.tdf'    'Sol + tib+ WBR3.tdf'
     
     
    selTrials = 
     
        [1x2 double]
     
     
    lenFN =
     
         1
     
     
    k =
     
         1     3
     
     
    ans =
     
         1
     
    ??? Cell contents reference from a non-cell array object.
     
    Error in ==> fileproc>mnSavesel_Callback at 920
        for iterK=1:length(k{ii})
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uimenu Callback
    selTrails sont la position des fichiers sélectionné dans la listbox pour être sauve gardés. Je pense que le prblème vient du fait que je n'arrive pas a faire la part des choses entre les tableaux et les tableaux de cellules. Je ne comprend pas pourquoi lenFN =1 alors que je devrais avoir deux. J'ai essayé avec numel, et size, mais rien n'y fait je reste avec mon 1.
    Merci de vos réponses si vous avez un moment

  4. #4
    Expert confirmé
    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
    Par défaut
    Forcément puisque tu as modifié :
    enAvec les cellules la différence entre les accolades {} et les parenthèses () est très importante.
    As-tu bien lu la à ce sujet : Les tableaux de cellules (cell array)

    Et en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lenFN=length({selTrials})
    Le fait de mettre des accolades te donne forcément 1 car l'objet de type cell contient 1 seule donnée qui est selTrials.
    Le nombre d'élements de selTrials sera obtenu par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lenFN=length(selTrials)
    Ceci dit selTrials dans ton exemple est effectivement de taille 1*1 et le seul élément qu'il contient est un vecteur qui lui fait 2*1.
    Ceci est du au fait qu'un tableau de cellule permet de stocker tout et n'importe quoi, donc des objets de taille différente.
    A toi de savoir si la taille qui t'intéresse est celle de l'objet cellule ou celle du contenu de la cellule.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut J'ai encore des problèmes entre les () et les {}
    Bonsoir (vu l'heure qu'il est)
    j'ai modifié le code comme suis
    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
    % --------------------------------------------------------------------
    %save SEPARATELY selected .tdf-files in .mat-files
    function mnSavesel_Callback(hObject, eventdata, handles)
    global SmartData selTrials PathName FileName
    % hObject    handle to mnSavesel (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    %function SaveMATfile(Path, fName, SmartX)
    h = waitbar(0, 'Please wait - saving data in .MAT file(s)...');
    if iscell(FileName)
        FileName
        selTrials{:};
      lenFN=length(selTrials{:})
      for ii=1:lenFN
        k=selTrials{ii}
        k(ii)
        for iterK=1:lenFN
            iterK
            k(iterK)
        msg=['Please wait - save file ' strrep(FileName(k(ii)), 'tdf', 'mat')];
        SaveMATfile(PathName, FileName{k{ii}(iterK)}, SmartData{k});
        end
        %msg=['Please wait - save file ' strrep(FileName{k}, 'tdf', 'mat') '...']; 
        waitbar(ii/lenFN, h, msg);   
        %SaveMATfile(PathName, FileName{k}, SmartData{k});
      end 
    else
        waitbar(0.4,h);
        SaveMATfile(PathName, FileName, SmartData{1});
    end    
    close(h)
    end
    et j'ai toujours un message d'erreur:
    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
    FileName = 
     
        'Sol + tib+ WBR1.tdf'    'Sol + tib+ WBR2.tdf'    'Sol + tib+ WBR3.tdf'
     
     
    lenFN =
     
         2
     
     
    k =
     
         1     3
     
     
    ans =
     
         1
     
     
    iterK =
     
         1
     
     
    ans =
     
         1
     
    ??? Cell contents reference from a non-cell array object.
     
    Error in ==> fileproc>mnSavesel_Callback at 924
        SaveMATfile(PathName, FileName{k{ii}(iterK)}, SmartData{k});
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uimenu Callback
    par contre lorsque je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SaveMATfile(PathName, FileName{k{ii}(iterK)}, SmartData{k});
    en commentaire j'ai bien
    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
    FileName = 
     
        'Sol + tib+ WBR1.tdf'    'Sol + tib+ WBR2.tdf'    'Sol + tib+ WBR3.tdf'
     
     
    lenFN =
     
         2
     
     
    k =
     
         1     3
     
     
    ans =
     
         1
     
     
    iterK =
     
         1
     
     
    ans =
     
         1
     
     
    iterK =
     
         2
     
     
    ans =
     
         3
     
    ??? Index exceeds matrix dimensions.
     
    Error in ==> fileproc>mnSavesel_Callback at 918
        k=selTrials{ii}
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uimenu Callback
    ce qui me laisse penser quejene suispas tres loin du bon code. Mais je vous avoue qu'entre les () et les {} je suis perdu je vous envois aussi la fonction SaveMATfile si cela vous parle.
    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
    %--------------------------------------------------------------------------
    function SaveMATfile(Path, fName, SmartX)
    %Saving (raw) kinematics data in mat-file
    %Path - path to file
    %fName - file name
    %labelsX - headers of data columns
    %dataX - data array
    %fraq - digitization frequancy
    %SmartX={freqs,labels,DataSet, Data};
            ffreq=[{'Frequency-kinematics'},{'Frequency-EMG'},{'Frequency-Force Platform'}];
            ffreq(2,:)=num2cell(SmartX{1});
            data=cell(3,1);      
            if SmartX{3}(1)>0 %KINEMATICS 
                   data{1}=SmartX{2}(1:SmartX{3}(1))';  %=>labels
                   data{1}(2:size(SmartX{4}{1}, 1)+1, :) = num2cell(SmartX{4}{1}); 
            end
            if SmartX{3}(2)>0 %EMG 
                   data{2}=SmartX{2}(SmartX{3}(1)+1:SmartX{3}(1)+SmartX{3}(2))';  %=>labels
                   data{2}(2:size(SmartX{4}{2}, 1)+1, :) = num2cell(SmartX{4}{2}); 
            end
            if SmartX{3}(3)>0 %FORCE PLATFORM
                   data{3}=SmartX{2}(SmartX{3}(1)+SmartX{3}(2)+1: ...
                       SmartX{3}(1)+SmartX{3}(2)+SmartX{3}(3))';  %=>labels
                   data{3}(2:size(SmartX{4}{3}, 1)+1, :) = num2cell(SmartX{4}{3}); 
            end
            outdat = struct('ExpData', [],'Frequencies',[]);
            outdat.ExpData=data;
            outdat.Frequencies=ffreq;
            save([Path, strrep(fName, 'tdf', 'mat')], 'outdat');
    end
    %--------------------------------------------------------------------------
    Moi je reste perplexe devant tant d'adversité il est certain que le but est d'enregistrer les fichiers selectionnés dans la listbox avec le même nom mais sous un format excel. Si vous voyez, l'un de vous, comment s'en sortir cela m'aiderait beaucoup.
    Bonne soirée et a demain

  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 317
    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 317
    Par défaut
    As-tu vérifié si la variable SmartData était bien un tableau de cellules ?

Discussions similaires

  1. Débutant en Javascript : problème de tableau !
    Par bluheim dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/11/2005, 15h03
  2. [XHTML] problème de tableau
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/04/2005, 07h18
  3. Problème de tableau
    Par tom06440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/04/2005, 20h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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