Operate a string in a cell matrix
Show older comments
Hi, I have a cell matrix imported from excel:
[39] [1232] [ 567] [ NaN]
[40] [ 48] [ 41] [ 949]
[41] [ 48] [ 1686] [ 40]
[42] [ 754] [ 753] [ 40]
[43] [ 48] '800 1069 1152' [ 983]
[44] [ 43] [ 48] '700 109 152'
[45] [ 52] [ 1340] [ 1363]
[46] [1340] [ 45] [ 1594]
there are all number with each taking one gird in excel except two "800 1069 1152" and '700 109 152' taking a single grid. In matlab, by [num,txt,raw] = xlsread() the raw matrix is a cell matrix with '800 1069 1152' a string. Is there a way I want to just keep 800, and 700 from those two strings, and convert this cell matrix to a normal matrix for future programming?
Thank you for any suggestion Kyle
Accepted Answer
More Answers (1)
Muthu Annamalai
on 28 Sep 2012
Hello Kyle,
Solution is fairly straightforward.
First you can identify the locations where '*xlsread*' bailed out, by looking for the NaN in the matrix p,
[p,q,r]=xlsread('xl_file_name.xls')
[R,C]=find(isnan(p))
and then work to extract the first element, which is what you mention in the post, from 'cell-string' of numbers to a 'double' type. You can do this by, working your way through the row-column index
for idx = 1:length(R)
long_str = r{R(idx),C(idx)};% pickup the long string
t=regexp(long_str,' ','split'); %split it into n-element strings
r{R(idx),C(idx)}=str2double(t{1});% convert to double
end
Finally the magic step is to convert your cell-matrix into a regular matrix,
p = cell2mat(r);
Together your code should look like,
[p,q,r]=xlsread('xl_file.xls')
[R,C]=find(isnan(p))
for idx = 1:length(R)
long_str = r{R(idx),C(idx)};% pickup the long string
t=regexp(long_str,' ','split'); %split it into n-element strings
r{R(idx),C(idx)}=str2double(t{1});% convert to double
end
p = cell2mat(r)
HTH, -Muthu
Categories
Find more on Data Type Conversion in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!