splitting cell array consists of string and numeric characters

I have a cell array (n x 1). Each cell looks something like this:
* 2021 3 29 0 0 0.00000000
I need to remove * from each cell and split the cell array into 6 columns consist of double values. For example;
2021 3 29 0 0 0
2021 3 30 0 0 0
.
.
.
How I can do that?

 Réponse acceptée

Wan Ji
Wan Ji le 26 Août 2021
Modifié(e) : Wan Ji le 26 Août 2021
Use replace
S = {...}; % your n*1 cell array
S = arrayfun(@(i)replace(S{i},'*',''),1:1:numel(S),'uniform',false);

9 commentaires

Wan Ji
Wan Ji le 26 Août 2021
Modifié(e) : Wan Ji le 26 Août 2021
And if you want to transform S later to datetime then use'
DT = arrayfun(@(i)datetime(str2num(S{i})),(1:1:numel(S))')
sermet OGUTCU
sermet OGUTCU le 26 Août 2021
Modifié(e) : sermet OGUTCU le 26 Août 2021
It removed the * and produced 1 x n cell array. But I need to split the "2021 3 29 0 0 0.00000000" into 6 columns. Could you show the next steps to do this?
S = {...}; % your n*1 cell array
S = arrayfun(@(i)num2str(str2num(replace(S{i},'*',''))),1:1:numel(S),'uniform',false);
Or you can do
S = {...}; % your n*1 cell array
S = arrayfun(@(i)replace(S{i},'* ',''),1:1:numel(S),'uniform',false);
sermet OGUTCU
sermet OGUTCU le 26 Août 2021
Modifié(e) : sermet OGUTCU le 26 Août 2021
Dear @Wan, I still get 1 x n cell array instead of n x 6 double array consists of 2021 3 29 0 0 0.00000000 double values. I edited my question to be more specific.
S = arrayfun(@(i)num2str(str2num(replace(S{i},'*',''))),1:1:numel(S),'uniform',false);
DT = arrayfun(@(i)datetime(str2num(S{i})),(1:1:numel(S))');
DV = datevec(DT);
YourCelln6 = mat2cell(DV,ones(size(DV,1),1),ones(size(DV,2),1));
You may see n*6 cell is not so good at all compared with DT or DV
Thank you very much for the solution.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by