How to sort the cell with string based on dates (earliest date should begin first)

I want to sort the following cell
{'(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 10/9/2020), (Z98.1 11/20/2020)'}
into
{'(Z98.1 10/9/2020), (Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 11/20/2020)'}
Thank you

4 Comments

Can you please verify that you really have a cell array with just one element, which contains just one character array?
C = {'(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 10/9/2020), (Z98.1 11/20/2020)'}
C = 1×1 cell array
{'(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 10/9/2020), (Z98.1 11/20/2020)'}
C{:}
ans = '(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 10/9/2020), (Z98.1 11/20/2020)'
And then you want the output to also be a one-element cell array? It seems more likely to me that you actually have a cell array with multiple elements, and you just wrote it out wrong here, and the solution will be very different depending on the input.
Hi. Thank you very much for your response.
I have attached the screenshot of the cell array I have for your reference.
Thank you.
screenshot is useless for anybody to do anything with; my old eyes can't even make it out with the sienna tone overlaying it. We'd have to try to read enough of that to make up something useful to try to do something with; that's just not an effective use of volunteers' time here...
Attach the actual cell array itself (save to a .mat file, then attach it w/ the paperclip)
"Help us help you!"

Sign in to comment.

 Accepted Answer

Hi Geerthy,
Here is one approach. Some of the steps can be combined if fewer lines of code are desired.
c = {'(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 10/9/2020), (Z98.1 11/20/2020)'};
s = split(c,",")
s = 4×1 cell array
{'(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020)'} {' (Z98.1 10/15/2020)' } {' (Z98.1 10/9/2020)' } {' (Z98.1 11/20/2020)' }
d = datetime(reverse(extractAfter(extractBefore(reverse(s)," "),1)))
d = 4×1 datetime array
13-Oct-2020 15-Oct-2020 09-Oct-2020 20-Nov-2020
[~,index] = sort(d);
s = s(index);
s = strtrim(s)
s = 4×1 cell array
{'(Z98.1 10/9/2020)' } {'(Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020)'} {'(Z98.1 10/15/2020)' } {'(Z98.1 11/20/2020)' }
s = join(s,", ")
s = 1×1 cell array
{'(Z98.1 10/9/2020), (Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 11/20/2020)'}
% {'(Z98.1 10/9/2020), (Z98.1 Z47.89 Z98.1 Z98.1 10/13/2020), (Z98.1 10/15/2020), (Z98.1 11/20/2020)'}

More Answers (0)

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!