Cell array help with strings
Show older comments
I am trying to write several rows of a cell array into one box of a new cell array.
x = {('Q');('N');('Q');('New');('Q');('N');('Q');}
I need to output a cellarray that has all the Q's and when it reaches 'New' it goes to the next row so the output looks like this:
y = {('Q Q' ; 'Q Q'}
As of right now I have this:
x = {('Q');('N');('Q');('New');('Q');('N');('Q');}
q = string(x);
% T = table()
c = {};
for i = 1:numel(x)
if strcmp(q(i),'Q') || strcmp(q(i),'L')
c = {strjoin(q(i),' ')}
else strcmp(q(i),'New')
end
end
A good point to touch on is that the x array will not be periodic always.
Accepted Answer
More Answers (1)
>> x = {'Q';'N';'Q';'New';'Q';'N';'Q'};
>> y = 1+cumsum(strcmpi(x,'new'));
>> z = strcmpi(x,'Q') | strcmpi(x,'L');
>> foo = @(v){strjoin(x(v))};
>> out = accumarray(y(z),find(z),[],foo)
out =
'Q Q'
'Q Q'
Or for MATLAB versions before R2013a:
>> baz = @(s)s(2:end);
>> foo = @(v){baz(sprintf(' %s',x{v}))};
>> out = accumarray(y(z),find(z),[],foo)
out =
'Q Q'
'Q Q'
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!