MATLAB Answers

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

2 ビュー (過去 30 日間)
HT
HT 2019 年 9 月 13 日
コメント済み: Stephen Cobeldick 2019 年 9 月 13 日
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}

  0 件のコメント

サインインしてコメントする。

採用された回答

Stephen Cobeldick
Stephen Cobeldick 2019 年 9 月 13 日
編集済み: Stephen Cobeldick 2019 年 9 月 13 日
>> 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 件のコメント

David Hill
David Hill 2019 年 9 月 13 日
Very nice!
Stephen Cobeldick
Stephen Cobeldick 2019 年 9 月 13 日
@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'

サインインしてコメントする。

その他の回答 (1 件)

David Hill
David Hill 2019 年 9 月 13 日
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

  0 件のコメント

サインインしてコメントする。

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by