How do I delete empty cells in rows of a cell array?

1 visualizzazione (ultimi 30 giorni)
Hi,
I have a cell array of strings and empty cells. I would like to rearrange this so the empty cells are on the end of each row. For example:
[a] [b] [ ] [ ] [c]
[d] [ ] [e] [ ] [ ]
should become:
[a] [b] [c] [ ] [ ]
[d] [e] [ ] [ ] [ ]
The reason I want to do this is to ultimately end up with a cell matrix of strings in the following form:
[abc]
[de]
How would I accomplish these things, or is there a more efficient way to end up with the matrix of strings?

Risposta accettata

Azzi Abdelmalek
Azzi Abdelmalek il 11 Giu 2013
Modificato: Azzi Abdelmalek il 11 Giu 2013
A={['a'] ['b'] [ ] [ ] ['c']
['d'] [ ] ['e'] [ ] [ ]}
idx=not(cellfun(@isempty,A))
out=arrayfun(@(x) cell2mat(A(x,idx(x,:))),[1:size(A,1)]','un',0)

Più risposte (1)

Matt J
Matt J il 11 Giu 2013
Modificato: Matt J il 11 Giu 2013
You don't need to reorder the empty cells if all you intend to do is concatenate across rows:
>> C={'a',[],'b';[], 'e','d'}
C =
'a' [] 'b'
[] 'e' 'd'
>> Ccat=cell(size(C,1),1); for ii=1:size(C,1); Ccat{ii}=[C{ii,:}] ;end,
>> Ccat
Ccat =
'ab'
'ed'

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by