it-swarm.com.de

Wie erkenne ich leere Zellen in einem Zellenfeld?

Wie erkenne ich leere Zellen in einem Zellenfeld? Ich weiß, dass der Befehl zum Entfernen der leeren Zelle a(1) = [] ist, aber es scheint nicht, dass MATLAB automatisch erkennt, welche Zellen leer sind. 

Hintergrund: Ich habe ein Zellenarray mit a=cell(1,53) vorbelegt. .__ Dann habe ich if exist(filename(i)) und Textscan verwendet, um nach einer Datei zu suchen und sie einzulesen. Wenn filename(i) nicht vorhanden ist, resultiert daraus eine leere Zelle, und wir gehen zur nächsten Datei über. 

Wenn ich alle Dateien gelesen habe, möchte ich die leeren Zellen von a löschen. Ich habe versucht if a(i)==[]

34
N.C. Rolly

Verwenden Sie CELLFUN

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

Hinweis: a(i)==[] funktioniert nicht. Wenn Sie wissen möchten, ob die i-te Zelle leer ist, müssen Sie geschwungene Klammern verwenden, um auf den Inhalt der Zelle zuzugreifen. Außerdem wird ==[] als leer ausgewertet, anstelle von true/false. Daher sollten Sie stattdessen den Befehl isempty verwenden. Kurz gesagt: a(i)==[] sollte als isempty(a{i}) umgeschrieben werden.

55
Jonas

Alle oben genannten Antworten sind falsch, da sie in meinem Fall leere Zellen und dann alle in einer Reihe angeordneten Elemente meines Zellenarrays entfernt haben, anstatt ihre tatsächliche Form zu erhalten. Tatsächlich neigen Ihre Zellen-Array-Elemente dazu, einen Zeilenzellenvektor zu verwenden.

Ich habe diesen Ansatz gefunden, der in meinem Fall richtig funktioniert.

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

ansatz:

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