2015-09-22 48 views
0

在MatLab中(我得到版本2014b,但我可以很容易地更新到2015 ..)你得到函数dir(PATH),从中你可以接收目录的内容作为结构。从MatLab中的目录中排序结构

现在我的问题是,结构中的条目不按文件名排序。 在我的程序中,我让用户选择一个文件uigetFile,文件按名称排序(由OS完成)。因此,用户可能会选择对话框中的第一个文件,但不是fileList中的第一个文件。

所以我的问题是,uigetfile对话中的文件种类不同,功能dir返回。

如何才能实现结构排序或打开对话框中的文件排序如从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专用)Dialogue-for File selection

+0

我从来没有注意过'files = dir('* .txt'); files.name'不能按文件名排序。你有没有例子? – IKavanagh

+0

@IKavanagh我在上面编辑过我的帖子,现在你可以看到从'dir'收到的结构和从对话开始的截图。 –

+0

我刚刚添加了一个文件'JV_1914_0013.1.tif',这是在列表中的正确位置oO –

回答

2

一般,我不认为MATLAB可以判断文件是如何在uigetfile对话排序。至少在Windows中,用户可以选择按名称,日期,大小和类型对对话进行排序,并且没有关于所选排序方法的信息返回给MATLAB。 'JV...'后因为MATLAB小写字母排序前大写字母

dir回报'ccc'

针对您的特殊需要,如果你需要的是ccc提前JV...进行排序,那么这可能帮助。如果这确实是你唯一的问题:

files = dir('*.txt'); 
names = files.name; 
[~,idx] = sort(lower(names)); 
names = names(idx); 

lower把一切都在names为小写,这样的情况是不再是一个问题。 [~,idx]=sort()返回敏感列表的索引,您可以使用该列表对实际列表重新排序。

+0

不错,这对我来说工作得很好。之前在'lower'函数中丢失了什么,我想知道为什么它不排序XD –