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

4 views (last 30 days)
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
dpb
dpb on 2 Jun 2023
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

Paul
Paul on 2 Jun 2023
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)

Tags

Community Treasure Hunt

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

Start Hunting!