MATLAB Answers

0

Extract integer number from a cell array.

Asked by Biswajit Dipan Biswas on 1 Oct 2019
Latest activity Edited by Akira Agata
on 2 Oct 2019
Hi,
I need to extract only number from a cell array. For example, from the cell array given below I only need to take 17 out,
{'REMOVE UNIT 1 FROM BUS 17←'}
or from the following cell I need 459 and 496
{'OPEN BRANCH FROM BUS 459 TO BUS 496 CIRCUIT 1←'}. How can I do that?
Till now what I've done, I've split the cell into multiple cells on the basis of delimiter, like the following
16×1 cell array
{'OPEN' }
{'BRANCH' }
{'FROM' }
{'BUS' }
{0×0 char }
{0×0 char }
{0×0 char }
{'459' }
{'TO' }
{'BUS' }
{0×0 char }
{0×0 char }
{0×0 char }
{'496' }
{'CIRCUIT'}
{'1←' }
what happens, depending on the number of spaces in between the index of the numbers vary in different cases. How can I solve this issue in a better approach? Please let me know.
Thank you.

  0 Comments

Sign in to comment.

Products


Release

R2018b

2 Answers

Answer by Akira Agata
on 2 Oct 2019
Edited by Akira Agata
on 2 Oct 2019
 Accepted Answer

If my understanding is correct, you are trying to extract numbers just after 'BUS'.
If so, how about the following?
% Original text
str =...
{'OPEN BRANCH FROM BUS 459 TO BUS 496 CIRCUIT 1←';...
'REMOVE UNIT 1 FROM BUS 17←'};
% Extract 'BUS + number'
data = regexp(str,'BUS\s+\d+','match');
% Extract number(s)
for kk = 1:numel(data)
data{kk} = regexprep(data{kk},'BUS\s+','');
end
The result is:
>> data{1}
ans =
1×2 cell array
{'459'} {'496'}
>> data{2}
ans =
1×1 cell array
{'17'}

  1 Comment

This worked perfectly. Thank you sir.

Sign in to comment.


Answer by James Tursa
on 2 Oct 2019

You could do this:
C = your cell array of strings, some containing numbers
d = str2double(C);
d = d(~isnan(d));

  1 Comment

Sign in to comment.