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 :

Supprimer/Enlever une colonne d'un tableau


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut Supprimer/Enlever une colonne d'un tableau
    Bonjour,

    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
    set (handles.graph_1,'Enable','on');
              nameList = {'Tri_'};  
              for iIndex = 1:10     
                     Field  = sprintf('%s%d', nameList{1},iIndex);
                     if findobj('Tag',Field,'Enable','on')
                       H = handles.(Field);  
                       String = get(H, 'String');
                       Value  = get(H, 'Value');
                       fichier = String{Value}  ;                                     
                       if strncmp (fichier ,'ME_',3)
                          tableau{j} = fichier;
                          j=j+1;
                       end     
                    end
              end
                 for i=1:length(tableau)
                     for j=i+1:length(tableau)
                          if  strcmp(tableau{i},tableau{j})
                              tableau{j}= -1;
                          end
                    end
                 end
    Je suis en présence d'une fonction de tri , et j'obtiens un tableau contenant ce qui à été choisis , je supprime les éléments redondants :

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tableau = 
     
          'ME_1.m'    'ME_1.m'    'ME_2.m'    'ME_1.m'
     
    tableau = 
     
          'ME_1.m'    [-1]    'ME_2.m'    [-1]

    les éléments redondants sont transformés en -1 , toutefois je souhaiterais les supprimer pour les afficher dans un menus ( pour éviter d'avoir un espace )

    comment puis je faire ?

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Au lieu de tableau{j}= -1; il faut faire tableau(j)= []; pour supprimer la case ou tableau{j}= ''; pour mettre un string vide.

    Attention, dans le cas ou tu supprimes, il ne faut pas le faire pendant la boucle car cela va fausser les indices des itérations suivantes. Il te suffit de stocker tous les j à supprimer, puis après la boucle, de tout supprimer d'un coup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    j_todelete= [];
    for ...
        ....
        j_todelete(end+1)= j;
    end
    tableau(j_todelete)= [];

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Il y avait une petite erreur que j 'ai corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if strncmp (fichier ,'ME_',3)
                          tableau{j} = fichier;
                          j=j+1;

    c'est tableau{j} et pas tableau{iIndex}.



    le cas = [] ne m'arrange pas car , dans mon affichage menu déroulant il y a : 'ME_1' et ' ' je ne souhaite pas de case vide

    Je ne vois pas bien comment programmer la boucle ...

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Une fois que tu as fait ton tableau, tu peux toujours en créer un nouveau avec uniquement les valeurs qui t’intéressent ( par exemple, if X ==1, je ne le mets pas dans mon tableau )
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Oui j'ai plus ou moins les idées mais je n'arrive pas à écrire les éléments pour arriver à faire cela :/

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Désolé, j'ai toujours pas compris ce que tu voulais faire
    toutefois je souhaiterais les supprimer pour les afficher dans un menus
    le cas = [] ne m'arrange pas car , dans mon affichage menu déroulant il y a : 'ME_1' et ' ' je ne souhaite pas de case vide

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Un truc de ce genre là? à rajouter après ta boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     c=1;
    for i =1:length(tableau)
        if tableau(i) ~=-1
            tableau2(c) = tableau(i)
            c=c+1;
        end
    end


    EDIT: si tu veux garder ton tableau, tableau2 = tableau puis clear tableau et tu inverses tableau et tableau2 sur le code au dessus
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    j'ai le choix de permettre entre 2 et 10 sélections de menus :

    je peux choisir pour chacun d'eux entre 10 éléments , il est possible d'avoir une redondance :

    quand j'ai plusieurs fois le même , un seul s'affiche dans mon tableau et les autres sont transformés en -1 dans mon programme , je souhaiterais que ceux-ci disparaissent car une fois formé mon tableau contenant mes différents élément et affiché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set (handles.graph_1,'String',tableau,'value',1);
    (Menu déroulant )

    j'aimerais n'avoir que : ME_1 , ME_2 et pas ME_1, -1, ME_2 ou ME_1, ' ' , ME_2

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Ton script est intéressant mais il m'affiche une érreur :

    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
    ??? Undefined function or method 'ne' for input arguments of type 'cell'.
     
    Error in ==> fonction_graphs_1 at 40
        if tableau(i) ~= -1
     
    Error in ==> Modele1>graph_Callback at 747
    fonction_graphs_1(handles)
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> Modele1 at 40
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==> @(hObject,eventdata)Modele1('graph_Callback',hObject,eventdata,guidata(hObject))
     
    ??? Error while evaluating uicontrol Callback

  10. #10
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Et bien il suffit de faire ce que je disais dans mon premier post pour les supprimer de ta liste (apres coup)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    j_todelete= [];
    for ...
        ....
        j_todelete(end+1)= j;
    end
    tableau(j_todelete)= [];

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Ah j'ai été étourdi, je débute également MATLAB, mais si ton tableau est de type cell, il faut remplacer les paranthèse par des accolades ( tableau(i) => tableau{i} )
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Effectivement le {j} et {i} fonctionne à présent !

    merci pour votre aide !

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    bah c'est juste ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     c=1;
    for i =1:length(tableau)
        if tableau{i} ~=-1
            tableau2{c} = tableau{i}
            c=c+1;
        end
    end
    PS: je suis pas sûr de bien suivre ce qu'il se passe WEED mais je pense que ce que veut Thornn654 c'est non pas de remplacer une case du tableau par une case vide mais de supprimer la case, c'est à dire par exemple de passer d'un tableau à 3 éléments, à un tableau à 2 éléments. Je suis pas sûr que tout le monde soit sur la même longueur d'onde pour le coup.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Oui je ne souhaitais pas de case vide , le script que tu m'as donné fonctionne et me permet d'obtenir ce que je souhaite

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

    Et la fonction unique alors ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> unique({'ME_1.m' 'ME_1.m' 'ME_2.m' 'ME_1.m'})
     
    ans = 
     
        'ME_1.m'    'ME_2.m'

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     for i=1:length(tableau)
                     for j=i+1:length(tableau)
                          if  strcmp(tableau{i},tableau{j})
                              tableau{j}= -1;
                          end
                    end
                 end
    c'est ça la fonction qui me permet d'obtenir un unique ME_X ,

    le code qu'a crée Gooby , me permet de conserver les éléments uniques restants

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Oui mais la solution de WinJerome semble plus propre et plus rapide, tu devrais tout de même y jeter un oeil, moi je suis content d'avoir appris l'existence de cette fonction unique
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 23
    Points
    23
    Par défaut
    Effectivement on passe de 15 lignes de code , à 4 pauvres mots , nettement plus simple

    Merci

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

Discussions similaires

  1. Supprimer des données dans une colonne d'un tableau
    Par hehee dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/06/2013, 22h01
  2. supprimer l'espace entre les cellules d'une colonne d'un tableau
    Par 123quatre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/09/2007, 11h52
  3. [CR11] Ajouter une colonne a un Tableau croisé
    Par tatayoyo dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 20/08/2006, 19h03
  4. Enlever une colonne !
    Par Chronax dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/03/2006, 17h15
  5. [vb/excel] suppression d'une colonne d'un tableau
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/10/2005, 11h17

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