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 :

J'ai des problèmes entre les [] et les {} [Débutant]


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 J'ai des problèmes entre les [] et les {}
    Bonjour
    J'ai encore quelques soucis pour bien comprendre les {} et les []. En effet j'ai un taleau de valeur numérique que je voudrai bien enregistrer sous un .MATJ'ai donc enregistré ces valeur dans un fichier excel,(que je vous joint) pour voir si c'était bien un tableau de valeur. Mon bouton est le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function mnSaveall_Callback(hObject, eventdata, handles)
    global PathName FileName Trials
    global SmartData dsRaw ChansAdded
    global SynchMode synLabel sMode datChanged Nm
    % hObject    handle to mnSaveall (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    h = waitbar(0, 'Sauve les données dans fichiers.MAT...');
    Trials=get(handles.lbFiles,'String');
    if iscell(FileName)
      lenFN=length(FileName);  
      for ii=1:lenFN
         srcPath=get(handles.lblFolder,'String');
         fName=[FileName{ii}]
         essai=Trials{ii}
         Smart=[SmartData{ii}{5}{1}];
         xlswrite([PathName,fName, '.xls'],Smart,'SmartData','B2');
         msg=['Sauvegarde du fichier ' strrep(FileName{ii}, 'tdf', 'mat') '...']; 
         waitbar(ii/lenFN, h, msg);
         if ~SynchMode
           SaveDataMAT(PathName, fName, Smart,dsRaw, srcPath, essai, ChansAdded,Nm);
        else
           SaveDataMAT(PathName, fName, Smart,dsRaw, srcPath, essai, ChansAdded,Nm,sMode, synLabel); 
        end
      end 
    else
        waitbar(0.4,h);
        SaveMATfile(PathName,fName, SmartData{1});
    end
    close(h)
    end
    Je sais que les variables globales sont a proscrire, mais je reprends un ancien code.Lorsque j'essaie d'enregistrer avec la fonction SaveDataMAT 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
    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
    function SaveDataMAT(Path, fName, SmartXXX, RawDataset, srcPath, trials, IChansAdded, Nms, varargin)
    global Nms
    %Titles for synchronization modes
    SynModes=[{'maximum value'}, {'minimum value'},{'global extremum'}, ...
        {'begin of decrease'},{'begin of increase'},{'specific value'}];
    %define MATRIX size for data saving 
      d3=size(SmartXXX,1); %the NUMBER of Trials (i.e. files)
      d12=zeros(d3,3);
      for dz=1:d3      %CYCLE by FILES
        for dtype=1:3  %CYCLE by data type    
          d12(dz,dtype)=size(SmartXXX{dz}{4}{dtype},1);
        end  
      end
     
      dz12=max(d12,[],1); %vector-array (3 elems.) of MAX sizes for kinemat., EMG, FC
      nLabs=SmartXXX{1}{3}(:); %The Number of labels of each type
      opCell=cell(3,1);
    %define structure array size for data saving   
      for dtype=1:3      %CYCLE by data type 
        ouDat=zeros(dz12(dtype),nLabs(dtype), d3);  
    %If data of varios length - equalize the lengths by adding NaN values    
        for dz=1:d3      %CYCLE by FILES
          difz=dz12(dtype)-d12(dz,dtype);
          if difz>0 ouDat(:, :, dz)=[SmartXXX{dz}{4}{dtype}; NaN(difz,nLabs(dtype))];
          else ouDat(:, :, dz)=SmartXXX{dz}{4}{dtype}; end 
        end 
        opCell{dtype}=ouDat;
      end    
      ffreq=[{'Frequency-kinematics'},{'Frequency-EMG'},{'Frequency-Force Platform'}];
      ffreq(2,:)=num2cell(SmartXXX{1}{1});
    % outdat - structure to save in .MAT-file
    % build this structure from information loaded 
    %& recieved during data processing
      outdat = struct('SourcePath', [], 'Trials',[],'Kinematics', [],'EMG',[], ...
             'ForcePlate',[],'Frequencies',[], 'Labels',[],'DataStruct',[],'RawDataStruct',[]);
      outdat.Kinematics=opCell{1};
      outdat.EMG=opCell{2};
      outdat.ForcePlate=opCell{3};
      outdat.Frequencies=ffreq;
      outdat.Labels=SmartXXX{1}{2};
      outdat.DataStruct=SmartXXX{1}{3};
      outdat.RawDataStruct=RawDataset;
      outdat.SourcePath=srcPath;
      outdat.Trials=trials;
      outdat.AddedChansInfo=IChansAdded;
      outdat.StartTime=SmartXXX{1}{7};
      if size(varargin,2)>0 %data were synchronized - synchro data mode 
        s1=char(SynModes(varargin{1})); %Mode of synchronization
        s=sprintf('Data synchronized on label %s (by %s)',varargin{2},s1); %which label was used for synchronization    
     %   varargin=>  SynModes(sMode), synLabel  
        outdat.SynchrInfo=s;
      end  
    %SAVING marker information
      MInfo=cell(d3,1); %place allocation for info of markers
      for ntr=1:d3      %CYCLE by TRIALS
       if size(SmartXXX{ntr},2)==8 %THERE is info of MARKERS
         MInfo{ntr}=SmartXXX{ntr}{8}; 
       end
      end
      outdat.MarkerInfo=MInfo;
      outdat.MarkerNumber=Nms; %MAX marker number
      save([Path, strrep(fName, 'tdf', 'mat')], 'outdat');
    end
    Il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    :??? Cell contents reference from a non-cell array object.
     
    Error in ==> fileproc>SaveDataMAT at 346
          d12(dz,dtype)=size(SmartXXX{dz}{4}{dtype},1);
     
    Error in ==> fileproc>mnSaveall_Callback at 913
           SaveDataMAT(PathName, fName, Smart,dsRaw, srcPath, essai, ChansAdded,Nm);
    .
    Je pense que je me trompe encore entre les {} et les [] ou les (). Je vous avoue que je suis un peu perdu dans toutes ces nuances.
    Si vous avez un moment pour m'aider ce serait tres bien.
    Merci d'avance et encore bravo pour votre aide

  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
    Le problème c'est que l'on peut difficilement deviner le format de tes variables
    J'ai l'impression qu'elles sont vraiment structurées de façon très complexe :
    des tableaux de cellules de structures contenant des tableaux de nombres et de structures et de cellules
    Normal que tu t'y perdes.

    Je pense qu'il faudrait que tu prennes le temps de te poser et d'étudier complètement les objets que tu manipules.
    Je sais que cela n'est pas facile ni très amusant mais au vu de tes différents posts, il faut vraiment que tu le fasses, car même si on te répond ponctuellement et que cela résouts ton problème, tu retomberas tôt ou tard sur le même.

    Je pense que je t'ai déjà donné ce lien : Les tableaux de cellules (cell array)
    Relis-le bien, essaye de le comprendre, essaye de faire des essais avec les cellules en ligne de commande.

    Pour t'aider à "fouiller" tes objets, comme ce sont des structures, tu peux regarder ce lien sur le FEX : MATLAB Central - File detail - Structure display

  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 J'ai enfin trouvé.
    Bonjour a tous,
    J'ai enfin comris comment on pouvait jouer entre le [], les {}, les (). Je ne peux malheureusement pas vous expliquer car je suis encore dans le brouillard, ni mettre le code sans un fichier de data qui est de 5MO, et que je ne peut pas tronquer. Mais bref Caro-line avait raison les données sont tres complexes, c'est un cellule formée de données cellules, tableaux, structure avec des index partout. Smartdata, c'est sont nom, est inexplicable. Bref je vous mets tout de même le code du bouton sachant qu'il ne faut pas le prendre sans y apporter votre contribution pour qu'il fonctionne avec vos données. Voici le code si cela peut aider a vos problèmre.
    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
    function mnSaveall_Callback(hObject, eventdata, handles)
    global PathName FileName Trials
    global SmartData dsRaw ChansAdded
    global SynchMode synLabel sMode datChanged Nm
    % hObject    handle to mnSaveall (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    h = waitbar(0, 'Sauve les données dans fichiers.MAT...');%barre d'attente
    Trials=get(handles.lbFiles,'String');%récupération de la liste box lbFiles
         srcPath=get(handles.lblFolder,'String');%Récupération du chemin des fichiers
    if iscell(FileName)%Si FileName est une cellule donc plusieurs FileName
      lenFN=length(FileName);  
      for ii=1:lenFN
         Smart={SmartData{ii}}% C'eslà que vons devez mettre vos données perso
         fName=[FileName{ii}];
         essai=Trials{ii};
         msg=['Sauvegarde du fichier ' strrep(FileName{ii}, 'tdf', 'mat') '...']; 
         waitbar(ii/lenFN, h, msg);
         if ~SynchMode
           SaveDataMAT(PathName, fName, Smart,dsRaw, srcPath, essai, ChansAdded,Nm);
        else
           SaveDataMAT(PathName, fName, Smart,dsRaw, srcPath, essai, ChansAdded,Nm,sMode, synLabel); 
        end
      end 
    else
        waitbar(0.4,h);
        if ~SynchMode
           SaveDataMAT(PathName, FileName, SmartData,dsRaw, srcPath, Trials, ChansAdded,Nm);
        else
           SaveDataMAT(PathName, FileName, SmartData,dsRaw, srcPath, Trials, ChansAdded,Nm,sMode, synLabel); 
        end
    end
    close(h)
    end
    La fonction SaveDataMAT est décrite dans le post d'avant mais je n'y ai pas touché.
    Bon courage a tous et j'espère pouvoir vous avoir aidé.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2010, 16h34
  2. Réponses: 2
    Dernier message: 19/03/2008, 11h25
  3. Réponses: 2
    Dernier message: 21/02/2007, 12h54
  4. [JONAS][DEBUTANT] Problème entre le wsdl et les .xml
    Par everick dans le forum Services Web
    Réponses: 2
    Dernier message: 22/11/2006, 18h29
  5. Connaitre Les adr IP des switch entre 2 pc
    Par TOPGUN89 dans le forum Hardware
    Réponses: 12
    Dernier message: 01/06/2006, 22h13

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