Find cells that start with text and combine it with next cell

1 visualizzazione (ultimi 30 giorni)
I have a cell array like:
{'Test1'}
{'10v'}
{'20va'}
{'30v'}
{'50v'}
{'65v'}
{'Test2'}
{'80v}
{100v}
I want to find cells that start with text and combine that with next cell and store in same variable. Output should be something like:
{'Test1 10v'}
{'20va'}
{'30v'}
{'50v'}
{'65v'}
{'Test2 80v'}
{100v}

Risposta accettata

Stephen23
Stephen23 il 13 Set 2019
Modificato: Stephen23 il 13 Set 2019
>> C = {'Test1';'10v';'20va';'30v';'50v';'65v';'Test2';'80v';'100v'}
C =
'Test1'
'10v'
'20va'
'30v'
'50v'
'65v'
'Test2'
'80v'
'100v'
>> X = cellfun('isempty',regexp(C(:),'^\D','once'));
>> Y = cumsum([1;X(1:end-1)]);
>> F = @(x){sprintf(' %s',C{x})};
>> Z = strtrim(accumarray(Y,(1:numel(C)).',[],F))
Z =
'Test1 10v'
'20va'
'30v'
'50v'
'65v'
'Test2 80v'
'100v'
  2 Commenti
Stephen23
Stephen23 il 13 Set 2019
@David Hill: thank you! It can be simplified with strjoin:
>> Z = accumarray(Y,(1:numel(C)).',[],@(x){strjoin(C(x))})
Z =
'Test1 10v'
'20va'
'30v'
'50v'
'65v'
'Test2 80v'
'100v'

Accedi per commentare.

Più risposte (1)

David Hill
David Hill il 13 Set 2019
Cell array (C), combined cell array (c).
i=1;
j=1;
while i<=size(C,2)
a=cell2mat(C{i})-57;
if a(1)>0
c{j}=[cell2mat(C{i}),' ',cell2mat(C{i+1})];
i=i+2;
else
c{j}=C{i};
i=i+1;
end
j=j+1;
end

Categorie

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

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by