How to take only first part of the string

2 views (last 30 days)
Kanakaiah Jakkula
Kanakaiah Jakkula on 30 Sep 2017
Edited: OCDER on 30 Sep 2017
Hi,
I have cell matrix as below:
column1 column2 column3
HaH 16 years 14
Tay 23 23 s
YAH 24 % shift
In column2~3, I only want to take first part if it is mixed string, my desired output:
HaH 16 14
Tay 23 23
YAH 24 shift

Answers (2)

Cedric Wannaz
Cedric Wannaz on 30 Sep 2017
Edited: Cedric Wannaz on 30 Sep 2017
Assuming that all cells content is of class char:
B = [A(:,1), cellfun(@(s)regexp(s, '\S+', 'match', 'once'), A(:,2:3), 'UniformOutput', false)] ;

OCDER
OCDER on 30 Sep 2017
Edited: OCDER on 30 Sep 2017
If dealing cell array with only strings:
A = {
'HaH' '16 years' '14';
'Tay' '23' '23 s';
'YAH' '24 %' 'shift'};
B = cellfun(@(x) sscanf(x, '%s', 1), A, 'uniformoutput', false); %scan every cell for 1st part
B =
'HaH' '16' '14'
'Tay' '23' '23'
'YAH' '24' 'shift'
If you also want to convert string part to a number ( ex: '24' to [24] )
Bnum = cellfun(@(x) sscanf(x, '%d', 1), B, 'uniformoutput', false); %scan every cell for 1st double number
NonEmptyIdx = ~cellfun(@isempty, Bnum); %mark where the numbers are in the cell
B(NonEmptyIdx) = Bnum(NonEmptyIdx); %replace string with number
B =
'HaH' [16] [ 14]
'Tay' [23] [ 23]
'YAH' [24] 'shift'

Community Treasure Hunt

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

Start Hunting!