Re: [討論] dir 自然排序

作者: celestialgod (天)   2016-04-12 01:17:15
※ 引述《dwadefans (wade)》之銘言:
: 我的檔案名稱是 A-(1).jpg, A-(2).jpg, A-(3).jpg...~A-(150).jpg
: 我使用dir函數取得我資料夾底下所有的jpg名稱
: list=dir('*.jpg')
: 但是我取得出來的順序會是:
: A-(1).jpg , A-(100).jpg, A-(101).jpg .... A-(9).jpg
: 看過網路上發現要按照我那樣子去排序稱做Natural Order
: 於是找到了sort_nat這個open source函數
: 但是套用時出現錯誤
: http://i.imgur.com/XmqxaGB.png
: 似乎是不能直接input dir這類型的變數
: 得經過轉換 但是才剛接觸matlab還有許多部份不了解
: 想請問有沒有人知道該如果正確的令檔案進行排序呢?
: 謝謝!
你可以用regular expression做排序試試看
list = dir('*.jpg');
% 產生測試list
% list = sort(arrayfun(@(x) ['A-(', num2str(x), ').jpg'], ..
% 1:150, 'uni', false));
% list(1:4)
% ans =
% 'A-(1).jpg' 'A-(10).jpg' 'A-(100).jpg' 'A-(101).jpg'
[~, idx] = sort(cellfun(@str2double, ...
regexprep(list, 'A-\((\d*)\).jpg', '$1')));
list_output = list(idx);
list_output(1:4)
% ans =
% 'A-(1).jpg' 'A-(2).jpg' 'A-(3).jpg' 'A-(4).jpg'
作者: sunev (Veritas)   2016-04-12 07:30:00
這好像就是sort_nap的做法

Links booklink

Contact Us: admin [ a t ] ucptt.com