# Split a cell that contains a string

1 view (last 30 days)
Melissa Ette on 25 Oct 2020
Commented: Melissa Ette on 26 Oct 2020
I have a cell u(38,1) each row has string looking like this :
for example u{1,1} = ''198823 765389 white''
u{2,1} = ''198426 725312 black''
I want the cell u to be divided in 3 colomns such as
u{1,1} = ''198823'' u{1,2}= ''765389'' u{1,3}=''white''
u{2,1} = ''198426'' u{2,1}= ''725312'' u{2,3}=''black''
so basically I want my u(38,1) to become u(38,3)
I have tried strplit, but it seems like it won't work with a cell,
strplit(u,',') %doesn't work'
strplit(u{1,1},',') %works on the first line and returns a cell (1,3)

Cris LaPierre on 26 Oct 2020
Look into cellfun. This will apply a function to each cell in the cell array.
Here's an example of one way of doing this.
u{1,1} = "198823 765389 white";
u{2,1} = "198426 725312 black"
u = 2x1 cell array
{["198823 765389 white"]} {["198426 725312 black"]}
a=cellfun(@strsplit,u,'UniformOutput',false);
a=vertcat(a{:})
a = 2×3 string array
"198823" "765389" "white" "198426" "725312" "black"

Cris LaPierre on 26 Oct 2020
Actually, why keep this a cell? This can be done much simpler if you use strings.
u{1,1} = "198823 765389 white";
u{2,1} = "198426 725312 black"
u = 2x1 cell array
{["198823 765389 white"]} {["198426 725312 black"]}
% Convert cell array to a string array.
u2 = string(u)
u2 = 2×1 string array
"198823 765389 white" "198426 725312 black"
a2 = split(u2)
a2 = 2×3 string array
"198823" "765389" "white" "198426" "725312" "black"
Melissa Ette on 26 Oct 2020
Thank you it worked with a string array!!!