web-dev-qa-db-fra.com

Comment détecter des cellules vides dans un tableau de cellules?

Comment détecter des cellules vides dans un tableau de cellules? Je sais que la commande pour supprimer la cellule vide est a(1) = [], mais je n'arrive pas à faire en sorte que MATLAB détecte automatiquement les cellules vides. 

Fond: J'ai préalloué un tableau de cellules en utilisant a=cell(1,53). Ensuite, j'ai utilisé if exist(filename(i)) et Textscan pour rechercher un fichier et le lire. Par conséquent, lorsque la fonction filename(i) n'existe pas, une cellule vide apparaît et nous passons au fichier suivant. 

Quand j'ai fini de lire tous les fichiers, j'aimerais supprimer les cellules vides de a. J'ai essayé if a(i)==[]

34
N.C. Rolly

Utilisez CELLFUN

%# find empty cells
emptyCells = cellfun(@isempty,a);
%# remove empty cells
a(emptyCells) = [];

Remarque: a(i)==[] ne fonctionnera pas. Si vous voulez savoir si la i-ème cellule est vide, vous devez utiliser des accolades pour accéder au contenu de la cellule. De plus, ==[] est évalué comme vide, au lieu de true/false, vous devez donc utiliser la commande isempty à la place. En bref: a(i)==[] devrait être réécrit en isempty(a{i}).

55
Jonas

Toutes les réponses mentionnées ci-dessus sont incorrectes, car dans mon cas, lorsque je les ai utilisées, elles ont supprimé les cellules vides, puis tous les éléments de mon tableau de cellules situés en rangées au lieu de conserver leur forme réelle. En fait, après avoir utilisé ce type d’approche, vos éléments de tableau de cellules ont tendance à être un vecteur de cellules en ligne.

J'ai trouvé cette approche qui fonctionne correctement dans mon cas.

source: https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90

approche:

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];
0
Mahdi Karami