cell2mat not working when cell array of type char has numbers of different lengths

45 views (last 30 days)
Hello - I read in header and data information from files using xlsread. The text fields are returned in single column in a cell array of type char (for example "2014abc1-5ab" or "303abc2-5ab"). I need to separate the first set of digits, and I'd like it to be ultimately in a numeric array.
I current do:
[A, B] = xlsread('data.xls');
C = regexp(B,'\d*','match', 'once');
D = cell2mat(C);
E = str2num(D);
when B = {'2014abc1-5ab'; '2024abc1-5ab'}; The code works as desired. when B = {'2014abc1-5ab'; '303abc1-5ab'}; The code crashes in the cell2mat function. I've traced the problem to the 2014 and 303 being a different number of digits. Ultimately, I'd just like a column of the first numbers in B. B = [2014; 303]. I'm open to any suggestions to make the whole process cleaner.
Thanks!

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 2 Apr 2014
c = regexp(B,'^\d*','match');
out = str2double([c{:}]');

More Answers (2)

Chandrasekhar
Chandrasekhar on 2 Apr 2014
Edited: Chandrasekhar on 2 Apr 2014
In the second case the B{1} has 12 characters where as B{2} has only 11 characters . this is making an inconsistent matrix when cell2mat command is used. A matrix with 1st row containing 12 columns and 2nd row containing 11 columns cannot be created.

Dishant Arora
Dishant Arora on 2 Apr 2014
[A, B] = xlsread('data.xls');
C = regexp(B, '\d*', 'match', 'once');
E = cellfun(@str2num, C, 'Un', 1);

Community Treasure Hunt

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

Start Hunting!