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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    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 é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 828
    Points
    14 828
    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 du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    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 é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 828
    Points
    14 828
    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 du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    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
    Points : 52 952
    Points
    52 952
    Par défaut
    As-tu vérifié si la variable SmartData était bien un tableau de cellules ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut [débutant] toujours des messages d'erreurs
    bonjour et merci,
    je pense que SmartData est bien un tableau de cellules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SmartData = 
     
        {1x7 cell}
        {1x7 cell}
        {1x7 cell}
    . Par contre je ne comprends pas pourquoi avec la boucle ii j'ai ce 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    FileName = 
     
        'Sol + tib+ WBR1.tdf'    'Sol + tib+ WBR2.tdf'    'Sol + tib+ WBR3.tdf'
     
     
    lenFN =
     
         2
     
     
    k =
     
         1     3
     
     
    ans =
     
         1
     
     
    iterK =
     
         1
     
     
    ans =
     
         1
     
     
    ans = 
     
        'Sol + tib+ WBR1.tdf'
     
     
    iterK =
     
         2
     
     
    ans =
     
         3
     
     
    ans = 
     
        'Sol + tib+ WBR3.tdf'
     
    ??? Index exceeds matrix dimensions.
     
    Error in ==> fileproc>mnSavesel_Callback at 919
        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
    car elle doit s'arrêter a 2 (lenFN) itérations et donc les valeurs de k=selTrials{ii} existent bien
    je vous remet la partie du programme qui devrait m'enregistrer les fichiers (1,3) sélectionnés sous le format excel. J'y perds mon latin et mon espoir de voir un jour le bout du tunel.
    Merci de vous pencher sur ce problème de débutant!
    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
    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)
        SmartData
        FileName
        selTrials{:};
      lenFN=length(selTrials{:})
      for ii=1:lenFN
        k=selTrials{ii}
        k(ii)
        for iterK=1:lenFN
            iterK
            k(iterK)
            FileName(k(iterK))
            msg=['Please wait - save file ' strrep(FileName(k(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

  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 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
    Points : 52 952
    Points
    52 952
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    k=selTrials{1}(ii)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut Changement de problème, mais venant du même !!!
    Rebonjour
    J'ai essayé votre solution mais cela cré une erreur avec k(iterK). J'ai donc fais autrement et cela marche jusqu'a un certain point. Maintenant il me faut les enregistrer sous excel et là c'est encore un problème. J'ai bien tout ce qu'il faut comme nom de fichier, mais je pense que j'ai fait une erreur que je ne trouve pas. Voici mon nouveau code :
    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 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{:})
        k=selTrials{:}
        for iterK=1:lenFN
            iterK
            k(iterK)
            FileName(k(iterK))
            msg=['Please wait - save file ' strrep(FileName(k(iterK)), 'tdf', 'mat')];
            xlswrite(PathName, FileName(k(iterK)), SmartData{k});
        end 
        waitbar(k(iterK)/lenFN, h, msg); 
    else
        waitbar(0.4,h);
    %    SaveMATfile(PathName, FileName, SmartData{1});
    end    
    close(h)
    end
    Et ce message d'erreur qui me laisse sans voix
    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
    FileName = 
     
        'Sol + tib+ WBR1.tdf'    'Sol + tib+ WBR2.tdf'    'Sol + tib+ WBR3.tdf'
     
     
    lenFN =
     
         2
     
     
    k =
     
         1     3
     
     
    iterK =
     
         1
     
     
    ans =
     
         1
     
     
    ans = 
     
        'Sol + tib+ WBR1.tdf'
     
    ??? Error using ==> xlswrite at 129
    Sheet argument must a string or a whole number greater than 0.
     
    Error in ==> fileproc>mnSavesel_Callback at 925
            xlswrite(PathName, FileName(k(iterK)), SmartData{k});
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
    Pourtant j'ai bien le nom de fichier a enregistrer et SmartData n'est pas vide. (J'ai encore beaucoup de progres a faire !!!!!!!)
    Pourriez vous voir si vous avez un moment, merci d'avance

  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 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
    Points : 52 952
    Points
    52 952
    Par défaut
    Il faut bien vérifier et respecter l'ordre et le type des arguments d'entrée de XLSWRITE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    file = fullfile(PathName, FileName(k(iterK)));
    xlswrite(file, SmartData{k});

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut problème avec fullfile
    rebonjour,
    j'ai bien l'impression que fullfile ne fonctionne pas avec des cellules. J'ai un gros message d'erreur qui m'a l'air de dire ça(si j'ai tout compris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ??? Undefined function or method 'eq' for input arguments of type 'cell'.
     
    Error in ==> fullfile at 37
          if (f(end)==fs) & (part(1)==fs),
     
    Error in ==> fileproc>mnSavesel_Callback at 924
            file =fullfile (PathName, (FileName(k(iterK))))
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
    or j'ai vérifié "FileName(k(iterK))" est bien une cellule. Le problème , je crois , vient de là. Par ailleur peut on enregistrer des cellules avec xlswrite dans une fichier excel car mes "SmartData" sont aussi des cellules.
    Merci de m'aider car là même dans l'aide je n'ai rien trouver mais mon anglais laisse a désirer.

  12. #12
    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 828
    Points
    14 828
    Par défaut
    Il faut lui donner une chaine de caractères et non pas une cellule donc plutôt :

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut Super cela marche, mais pour les cellules dans xlswrite
    Merci pour cette réponse rapide et tellement simple qu'il n'y a vraiment que moi pour ne pas la voir. J'ai pourtant essayé beaucoup de () et {}, mais visiblement pas celles la, ou pas au bon endroit.
    Par contre je pense qu'il faut pour enregistrer dans excel des données numériques ou des chaines, car j'ai un message qui ne me dit rien de tres explicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Error: Object returned error code: 0x800A03EC
     
    Error in ==> fileproc>mnSavesel_Callback at 925
            xlswrite(file, SmartData{iterK});
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> fileproc at 29
        gui_mainfcn(gui_State, varargin{:});
    pareil j'ai essayé des () et des {}, mais je n'y arrive pas. Aurai je encore l'audace de vous demander votre avis ! Voici le code de ce programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for iterK=1:lenFN
            k(iterK)
            FileName(k(iterK))
            SmartData(iterK)
            msg=['Please wait - save file ' strrep(FileName(k(iterK)), 'tdf', 'mat')];
            file =fullfile (PathName, FileName{k(iterK)})
            xlswrite(file, SmartData{iterK});
        end
    J'espère que vous avez une solution car je suis complètement bloqué par ces cellules de crise que je ne vais pas tarder a faire !!!!!!!!

  14. #14
    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 828
    Points
    14 828
    Par défaut
    Aie une erreur Excel, pas facile.
    Peux-tu nous montrer ce qu'il y a exactement dans SmartData{iterK} au moment où l'erreur se produit ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut Eh oui je rame et pour moi c'est du japonais
    Rebonjour,
    je pense que vous savez ce que cela veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ans = 
     
        [1x3 double]    {43x1 cell}    [1x3 double]    {3x1 cell}    {3x1 cell}    [1]    [0]
    . Cela l'air dêtre un aggloméra de cellules et de tableaux. Le problème reste a faire passer le tout sous un format qui soit enregistrable par xlswrite. Je n'ai rien trouver dans l'aide pour ce genre de convertion (ou alors je suis passé a coté). On est presque a la fin du challenge, et cela me serait d'une grande aide car il me faut reprendre tout les enregistrements fait en .mat pour les faire en excel qui est compatible avec les chercheurs avec qui je travaille. Voici le code que j'ai fait pour avoir ce résultat, est ce le bon ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for iterK=1:lenFN
            k(iterK)
            FileName(k(iterK))
            SmartData{iterK}
            msg=['Please wait - save file ' strrep(FileName(k(iterK)), 'tdf', 'mat')];
            file =fullfile (PathName, FileName{k(iterK)})
            xlswrite(file, SmartData{iterK});
        end
    Merci encore de votre aide car je suis perdu dans cest différents formats de données.

  16. #16
    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 828
    Points
    14 828
    Par défaut
    Ah ben oui c'est sur que ça ne peut pas fonctionner.
    Comment on été récupéré ces données depuis le fichier MAT original ?
    Et que veux-tu avoir au final dans ton fichier Excel ?

    Car ce sont quand même 2 formats très différents :
    - dans un fichier MAT tu enregistres des variables avec leur nom et leur valeur qui peut être n'importe quoi de reconnu par MATLAB (numérique, cell, structures...)
    - dans un fichier EXCEL tu écris, il s'agit uniquement de texte qu'éventuellement tu formates.

    Il faut donc :
    - dans un 1er temps savoir comment tu veux formater tes données dans le fichier Excel, suivant le type de données
    - dans un 2ème temps trouver le moyen d'écrire dans le fichier EXCEL : et là ce sera manuel, tu nas vas pas pouvoir le faire avec XLSWRITE a priori.

  17. #17
    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
    Points : 52 952
    Points
    52 952
    Par défaut
    Pour ma part, je trouve qu'il y a trop de données dans SmartData pour pouvoir les écrire en une seule fois.

    Pourquoi ne pas faire plusieurs appels successifs à XLSWRITE en écrivant à chaque fois un élément de SmartData dans le Range Excel qui va bien ?

    Sinon, attache un fichier mat (zippé) contenant uniquement la variable SmartData et dis nous comment les valeurs contenues dedans doivent être écrites dans le xls.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut [débutant]J'ai enfin un fichier qui tient en taille(original de 5Mo)
    Bonjour
    J'y ai passé un moment mais je l'ai!!!. Ce que je voudrait c'est créer des fichiers excel avec les différentes données de SmartData. En fait il y a les premières lignes qui me semble être du texte ( d'ailleurs je n'ai pas réussi a mettre les premières lignes correctement, en fait les '' marquent la séparation des colones pour le texte. Mais je pense que vous trouverez). Les lignes suivantes sont des valeurs numériques. Mon problème est d'inscrire dans un fichier excel les différentes valeurs de la structure SmartData avec les lignes d'entêtes qui vont bien. Je pense qu'il va falloir faire cela en plusieurs étapes mais je ne sais pas comment m'y prendre avec la () et les {} pour séparer les données ni comment faire pour qu'un xlswrite inscrive des valeus numérique et du texte dans un même fichier. Voici le code qui a généré le fichier
    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 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)
        selTrials{:};
      lenFN=length(selTrials{:})
      %for ii=1:lenFN
        k=selTrials{:}
    %   k(ii)
        for iterK=1:lenFN
            k(iterK)
            k=1
            FileName(k(iterK));
            SmartData{iterK}
            msg=['Please wait - save file ' strrep(FileName(k(iterK)), 'tdf', 'mat')];
            file =fullfile (PathName, FileName{k(iterK)})
            SaveMATfile(PathName, FileName{k}, SmartData{k});
        end 
        waitbar(k(iterK)/lenFN, h, msg);   
        %SaveMATfile(PathName, FileName{k}, SmartData{k});
      %end 
    else
        waitbar(0.4,h);
        SaveMATfile(PathName, FileName, SmartData{1});
    end    
    close(h)
    end
    Je vous envois aussi le fichier, de taille raisonnable, qui en est ressorti. J'espère que vous trouvez la solution car j'ai beaucoup d'enregistrement a reprendre de la même manière .

    Merci d'avance

  19. #19
    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
    Points : 52 952
    Points
    52 952
    Par défaut
    J'ai un peu de mal à faire le lien entre SmartData et les variables contenues dans le fichier mat, soit :

    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
    >> A_pastespecial
     
    A_pastespecial = 
     
        ''''Fx''	''Fy''	''Fz''	''Mx''	''My''	''Mz''''
     
    >> outdat
     
    outdat = 
     
            ExpData: {3x1 cell}
        Frequencies: {2x3 cell}
     
    >> outdat.ExpData
     
    ans = 
     
        {16x12 cell}
        {15x4  cell}
        {16x6  cell}
     
    >> outdat.Frequencies
     
    ans = 
     
        [1x20 char]    'Frequency-EMG'    [1x24 char]
        [      120]    [          960]    [      960]
     
    >> unnamed
     
    unnamed =
     
         0
     
    >> unnamed1
     
    unnamed1 =
     
         0
    Tu pourrais attacher un fichier xls que tu aurais remplis à la main avec ces données ?

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut voici le fichier excel
    rebonjour
    je n'en ai fait qu'un seul ,galère entre les lignes detrop et le reste. Bref je vous envoie le fichier type qu'il faut enregistrer sous excel avec les entêtes Il me semble que comme il y a trois types dedonnées il faut faire trois fichiersdifférents. Je dois tout refaire car mon collègue a fait des fichiers.mat et que les chercheurs veullent se retrouver dans excel. C'est une galère j'ai 5000 lignesde code a reprendre. Mais berf avec votre aide on va s'en sortir. Voici un bout de code qui doit normalement enregistrer les données sous format excel. Mais j'ai un message d'erreur. le code
    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
    function btXlsSave_Callback(hObject, eventdata, handles)
    global tracks labels PathName FileName
    % hObject    handle to btXlsSave (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    xlLabels=cell(3*length(labels),1);
    FileName(1)
    for k=1:length(labels)
      xlLabels{3*(k-1)+1}=labels{k};
      xlLabels{3*(k-1)+2}='';
      xlLabels{3*(k-1)+3}='';
    end
    %waitbar
    xlswrite([PathName,xlabel, '.xls'], xlLabels', 'SmartData','A1');
    xlswrite([PathName, strrep(SmartData, '.tdf', '.xls')], tracks,'SmartData','A2');
    %xlswrite([PathName, strrep(FileName, '.tdf', '.xls')], d);
    end
    et voici le message d'erreur que je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error(nargchk(1,inf,nargin,'struct'));
    Je ne sais pas combien de paramètresil faut pour le satisfaire et je suis perplexe en ce qui conserne le help de matlab.
    Merci de me répondre cela ferait avancer beaucoup de choses dans cette jungle.

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, 16h03
  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, 08h18
  3. Problème de tableau
    Par tom06440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/04/2005, 21h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 12h09

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