我在一个文件夹中有一组文件,它们被命名为1,2,3,...,10,11,......我正在运行这些文件的MATLAB代码,它正在取文件作为1,10,11,12,......(错误的顺序),我不想要。 我想获取序列1,2,3,...中的文件。 那么,有没有办法在MATLAB中执行此操作(我使用dir()命令获取文件夹的所有文件)?
我的MATLAB代码如下:
text1.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.keyCode == SWT.CR) {
String textData = text1.getText();
text1.setText("");
// HERE IS THE IMPORTANT CODE PART, NO SELECTION IS NEEDED
e.doit = false;
}
}
});
因此,上面的这个文件变量应该在序列1,2,3,......中的每个循环中获取所有文件。 但它正在进入1,10,11 ......序列(基于文本的方案)。 请按编号顺序帮助它。
答案 0 :(得分:1)
当您使用shell
标记此内容时,我认为您很乐意纠正shell中的问题。因此,您可以在shell中使用rename
(也称为Perl rename
和prename
)将所有数字填零以表示5个地方:
rename --dry-run 's/\d+/sprintf("%05d",$&)/e' *
所以,如果我从这开始:
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 0
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 1
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 11
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 2
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 Freddy 73 Frog
我最终得到了这个:
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 00000
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 00001
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 00002
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 00011
-rw-r--r-- 1 mark staff 0 16 Jan 12:23 Freddy 00073 Frog
答案 1 :(得分:1)
这是一个MATLAB解决方案:
cd DirContainingFiles1,2,3,...
names = strsplit(ls);
[~,idx]=sort(str2double(names));
for name = names(idx)
disp(name{1})
....
end
您无需重命名文件。使用ls获取文件列表。将它们转换为数字格式并获取已排序元素的索引。
如果您想使用dir
:
file_names= dir('DirContainingFiles1,2,3,...');
names = {file_names(3:end).name};
[~,idx]=sort(str2double(names));
for name = names(idx)
disp(name{1})
....
end
答案 2 :(得分:0)
只需使用
@tmp
在进入循环之前,它按数值排序 而
[natsortfiles][1](file_names);
按文字值排序。