Cell array help with strings

1 vue (au cours des 30 derniers jours)
Maddie Long
Maddie Long le 18 Fév 2020
Modifié(e) : Stephen23 le 19 Fév 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.

Réponse acceptée

Jacob Wood
Jacob Wood le 18 Fév 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 commentaire
Maddie Long
Maddie Long le 18 Fév 2020
You are a literal godsent human. Thank you so much!

Connectez-vous pour commenter.

Plus de réponses (1)

Stephen23
Stephen23 le 18 Fév 2020
Modifié(e) : Stephen23 le 19 Fév 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'

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by