Sorting the name field in dir command
152 次查看(过去 30 天)
显示 更早的评论
Hi all,
I have a problem when I'm trying to get the content of a folder. It gets the name of the files but not in order. For example, the files starts with X- where the X is a number from 1 to 320. My code gets the name's file in the order 1, 10, 100, etc... and I need it in order 1,2,3,4...320
This is my code
myFolder = 'C:\Users\U95511\Dropbox\UPF\Roberto Verino\Advantrack\Test15-130313\P12\A3\Results';
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
filePattern = fullfile(myFolder, '*.xls');
xlsFiles = dir(filePattern);
I need to order the struct xlsFiles.
I tried with W=sort(xlsFiles.name) but it creates an array instead of another struct ordered.
Thanks for the help.
BR,
Raúl.
0 个评论
回答(4 个)
Jonathan Sullivan
2013-3-14
编辑:Jonathan Sullivan
2013-3-14
[~,ind]=sort({xlsFiles.name});
W = xlsFiles(ind);
Azzi Abdelmalek
2013-3-14
f= dir(filePattern);
xlsfiles={f.name}
xlsfiles=sort(xlsfiles)
2 个评论
Azzi Abdelmalek
2013-3-14
编辑:Azzi Abdelmalek
2013-3-14
yourfolder= dir(filePattern);
xlsfiles={yourfolder.name}
[~,idx]=sort(xlsfiles)
new_folder=yourfolder(idx)
Dan
2021-3-16
Most of the time you don't need to actually sort the names. You can use the index to control the order in which a loop will access the names. This code works for me on version 2020b.
filePattern = '*.*';
files = dir(filePattern);
[~,idx] = sort(string({files.name}),2,'ascend');
for fileLoop=idx
% do something with files like print the names in order
fprintf('File: %d, %s', fileLoop, files(fileLoop).name)
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 File Operations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!