Cell array help with strings

2 views (last 30 days)
Maddie Long
Maddie Long on 18 Feb 2020
Edited: Stephen23 on 19 Feb 2020
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

Jacob Wood
Jacob Wood on 18 Feb 2020
One way this could be accomplished is by tracking what cell you are currently looking to write into, and then increasing this "current_cell" every time you see a 'New'. My implementation would look something like:
x = {('Q');('N');('Q');('New');('Q');('N');('Q');};
c = {};
current_cell = 1;
for i = 1:numel(x)
if (strcmp(x{i},'Q') || strcmp(x{i},'L')) && numel(c)<current_cell %meaning this would be the first element in the cell, so we don't need to put a space in front
c{current_cell} = x{i};
elseif strcmp(x{i},'Q') || strcmp(x{i},'L')
c{current_cell} = strjoin({c{current_cell},x{i}}); %strjoin puts the space in for us
elseif strcmp(x{i},'New')
current_cell = current_cell+1;
end
end
  1 Comment
Maddie Long
Maddie Long on 18 Feb 2020
You are a literal godsent human. Thank you so much!

Sign in to comment.

More Answers (1)

Stephen23
Stephen23 on 18 Feb 2020
Edited: Stephen23 on 19 Feb 2020
>> 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 Characters and Strings 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!