A more efficient or compact way to sort strings that contain dates
I have strings that contain dates.
Those strings are in a "random" order, i.e. they are not ordered by following the dates, from 2024/03/01 to 2024/03/31 (i.e. from the 1st of March 2024 to the 31st of March 2024).
Is there a more efficient or compact way to sort the following strings containing dates?
% (1) input (strings containing dates, in a "random" order)
a(1,:) = ‘123_abc_01_202403020000_202403022359.txt’;
a(2,:) = ‘123_abc_01_202403040000_202403042359.txt’;
a(3,:) = ‘123_abc_01_202403030000_202403032359.txt’;
a(4,:) = ‘123_abc_01_202403050000_202403052359.txt’;
a(5,:) = ‘123_abc_01_202403010000_202403012359.txt’;
a
% (2) create substrings with ordered dates, that we can use to compare with the unordered strings of the input
for i = 1 : 31
tmp = [];
if i <=10
tmp = sprintf(‘%02d’,i);
else
tmp = sprintf(‘%0d’,i);
end
b(i,:) = append(‘_202403’,tmp);
end
% sort the unordered strings of the input, by following the substrings that have ordered dates
for i = 1 : 5
for j = 1 : 31
if contains(a(i,:),b(j,:))
which_j(i) = j;
end
end
end
sorted_a = sort(a(which_j,:))I have strings that contain dates.
Those strings are in a "random" order, i.e. they are not ordered by following the dates, from 2024/03/01 to 2024/03/31 (i.e. from the 1st of March 2024 to the 31st of March 2024).
Is there a more efficient or compact way to sort the following strings containing dates?
% (1) input (strings containing dates, in a "random" order)
a(1,:) = ‘123_abc_01_202403020000_202403022359.txt’;
a(2,:) = ‘123_abc_01_202403040000_202403042359.txt’;
a(3,:) = ‘123_abc_01_202403030000_202403032359.txt’;
a(4,:) = ‘123_abc_01_202403050000_202403052359.txt’;
a(5,:) = ‘123_abc_01_202403010000_202403012359.txt’;
a
% (2) create substrings with ordered dates, that we can use to compare with the unordered strings of the input
for i = 1 : 31
tmp = [];
if i <=10
tmp = sprintf(‘%02d’,i);
else
tmp = sprintf(‘%0d’,i);
end
b(i,:) = append(‘_202403’,tmp);
end
% sort the unordered strings of the input, by following the substrings that have ordered dates
for i = 1 : 5
for j = 1 : 31
if contains(a(i,:),b(j,:))
which_j(i) = j;
end
end
end
sorted_a = sort(a(which_j,:)) I have strings that contain dates.
Those strings are in a "random" order, i.e. they are not ordered by following the dates, from 2024/03/01 to 2024/03/31 (i.e. from the 1st of March 2024 to the 31st of March 2024).
Is there a more efficient or compact way to sort the following strings containing dates?
% (1) input (strings containing dates, in a "random" order)
a(1,:) = ‘123_abc_01_202403020000_202403022359.txt’;
a(2,:) = ‘123_abc_01_202403040000_202403042359.txt’;
a(3,:) = ‘123_abc_01_202403030000_202403032359.txt’;
a(4,:) = ‘123_abc_01_202403050000_202403052359.txt’;
a(5,:) = ‘123_abc_01_202403010000_202403012359.txt’;
a
% (2) create substrings with ordered dates, that we can use to compare with the unordered strings of the input
for i = 1 : 31
tmp = [];
if i <=10
tmp = sprintf(‘%02d’,i);
else
tmp = sprintf(‘%0d’,i);
end
b(i,:) = append(‘_202403’,tmp);
end
% sort the unordered strings of the input, by following the substrings that have ordered dates
for i = 1 : 5
for j = 1 : 31
if contains(a(i,:),b(j,:))
which_j(i) = j;
end
end
end
sorted_a = sort(a(which_j,:)) string, dates, date, sort MATLAB Answers — New Questions