在 MatLab 中从目录中排序结构
sort a struct from dir in MatLab
在 MatLab 中(我得到的是 2014b 版,但我可以轻松更新到 2015..)你得到了函数dir(PATH)
,你可以从中接收目录内容作为结构。
现在我的问题是,结构中的条目没有按文件名排序。
在我的程序中,我让用户 select 一个带有 uigetFile
的文件,文件在那里按名称排序(由 OS 完成)。因此用户可能 select 对话中的第一个文件但不是 fileList
.
中的第一个文件
所以我的问题是,uigetfile
对话框中的文件排序与 dir
returns.
函数不同
如何实现结构排序或打开对话中的文件像从 dir
接收到的结构一样排序?
这是我在 fileList
中的结构目录:
'.' '22-Sep-2015 09:38:42' 0 true 736229,401875000
'..' '17-Sep-2015 15:23:37' 0 true 736224,641400463
'JV_1914_0001.tif' '21-Sep-2015 09:58:39' 720932 false 736228,415729167
'JV_1914_0003.tif' '06-Mrz-2011 18:49:36' 29844547 false 734568,784444445
'JV_1914_0004.tif' '06-Mrz-2011 18:49:44' 30382304 false 734568,784537037
'JV_1914_0005.tif' '06-Mrz-2011 18:49:50' 30389081 false 734568,784606481
'JV_1914_0006.tif' '06-Mrz-2011 18:49:58' 30436100 false 734568,784699074
'JV_1914_0007.tif' '06-Mrz-2011 18:50:06' 30442889 false 734568,784791667
'JV_1914_0008.tif' '06-Mrz-2011 18:50:14' 31125589 false 734568,784884259
'JV_1914_0009.tif' '06-Mrz-2011 18:50:22' 31132367 false 734568,784976852
'JV_1914_0010.tif' '06-Mrz-2011 18:50:30' 31080335 false 734568,785069444
'JV_1914_0011.tif' '06-Mrz-2011 18:50:36' 31087112 false 734568,785138889
'JV_1914_0012.tif' '06-Mrz-2011 18:50:44' 30237671 false 734568,785231482
'JV_1914_0013.tif' '06-Mrz-2011 18:50:52' 30244449 false 734568,785324074
'JV_1914_0014.tif' '06-Mrz-2011 18:51:00' 30282806 false 734568,785416667
'JV_1914_0015.tif' '06-Mrz-2011 18:51:08' 30289585 false 734568,785509259
'JV_1914_0016.tif' '06-Mrz-2011 18:51:16' 30294053 false 734568,785601852
'JV_1914_0017.tif' '06-Mrz-2011 18:51:24' 30300833 false 734568,785694444
'JV_1914_0018.tif' '06-Mrz-2011 18:51:32' 30300833 false 734568,785787037
'ccc.tif' '08-Sep-2015 21:28:44' 23332298 false 736215,894953704
如您所见,文件 ccc.tif
在列表末尾,而它在 uigetfile
的对话中排在首位(按名称排序 - 我猜可能是 OS-具体)
一般,我不认为MATLAB 可以确定文件在uigetfile
对话框中的排序方式。至少在 Windows 中,用户可以选择按名称、日期、大小和类型对对话进行排序,并且不会向 MATLAB 返回有关所选排序方法的信息。
根据您的具体需要,如果您只需要 ccc
排在 JV...
之前,那么这可能会有所帮助:
dir
returns 'ccc'
在 'JV...'
之后,因为 MATLAB 将大写字母排在小写字母之前。如果那确实是你唯一的问题:
files = dir('*.txt');
names = {files.name};
[~,idx] = sort(lower(names));
names = names(idx);
lower
将 names
中的所有内容都变成小写,这样大小写就不再是问题了。 [~,idx]=sort()
returns 在 敏感列表中排序的大小写的索引,用于对实际列表重新排序。
在 MatLab 中(我得到的是 2014b 版,但我可以轻松更新到 2015..)你得到了函数dir(PATH)
,你可以从中接收目录内容作为结构。
现在我的问题是,结构中的条目没有按文件名排序。
在我的程序中,我让用户 select 一个带有 uigetFile
的文件,文件在那里按名称排序(由 OS 完成)。因此用户可能 select 对话中的第一个文件但不是 fileList
.
所以我的问题是,uigetfile
对话框中的文件排序与 dir
returns.
如何实现结构排序或打开对话中的文件像从 dir
接收到的结构一样排序?
这是我在 fileList
中的结构目录:
'.' '22-Sep-2015 09:38:42' 0 true 736229,401875000
'..' '17-Sep-2015 15:23:37' 0 true 736224,641400463
'JV_1914_0001.tif' '21-Sep-2015 09:58:39' 720932 false 736228,415729167
'JV_1914_0003.tif' '06-Mrz-2011 18:49:36' 29844547 false 734568,784444445
'JV_1914_0004.tif' '06-Mrz-2011 18:49:44' 30382304 false 734568,784537037
'JV_1914_0005.tif' '06-Mrz-2011 18:49:50' 30389081 false 734568,784606481
'JV_1914_0006.tif' '06-Mrz-2011 18:49:58' 30436100 false 734568,784699074
'JV_1914_0007.tif' '06-Mrz-2011 18:50:06' 30442889 false 734568,784791667
'JV_1914_0008.tif' '06-Mrz-2011 18:50:14' 31125589 false 734568,784884259
'JV_1914_0009.tif' '06-Mrz-2011 18:50:22' 31132367 false 734568,784976852
'JV_1914_0010.tif' '06-Mrz-2011 18:50:30' 31080335 false 734568,785069444
'JV_1914_0011.tif' '06-Mrz-2011 18:50:36' 31087112 false 734568,785138889
'JV_1914_0012.tif' '06-Mrz-2011 18:50:44' 30237671 false 734568,785231482
'JV_1914_0013.tif' '06-Mrz-2011 18:50:52' 30244449 false 734568,785324074
'JV_1914_0014.tif' '06-Mrz-2011 18:51:00' 30282806 false 734568,785416667
'JV_1914_0015.tif' '06-Mrz-2011 18:51:08' 30289585 false 734568,785509259
'JV_1914_0016.tif' '06-Mrz-2011 18:51:16' 30294053 false 734568,785601852
'JV_1914_0017.tif' '06-Mrz-2011 18:51:24' 30300833 false 734568,785694444
'JV_1914_0018.tif' '06-Mrz-2011 18:51:32' 30300833 false 734568,785787037
'ccc.tif' '08-Sep-2015 21:28:44' 23332298 false 736215,894953704
如您所见,文件 ccc.tif
在列表末尾,而它在 uigetfile
的对话中排在首位(按名称排序 - 我猜可能是 OS-具体)
一般,我不认为MATLAB 可以确定文件在uigetfile
对话框中的排序方式。至少在 Windows 中,用户可以选择按名称、日期、大小和类型对对话进行排序,并且不会向 MATLAB 返回有关所选排序方法的信息。
根据您的具体需要,如果您只需要 ccc
排在 JV...
之前,那么这可能会有所帮助:
dir
returns 'ccc'
在 'JV...'
之后,因为 MATLAB 将大写字母排在小写字母之前。如果那确实是你唯一的问题:
files = dir('*.txt');
names = {files.name};
[~,idx] = sort(lower(names));
names = names(idx);
lower
将 names
中的所有内容都变成小写,这样大小写就不再是问题了。 [~,idx]=sort()
returns 在 敏感列表中排序的大小写的索引,用于对实际列表重新排序。