Matlab dir('*.txt') 命令未按顺序列出 txt 文件
Matlab dir('*.txt') command is not listing txt files in order
我正在 MATLAB 中使用 dir('*.txt')
从文件夹中读取文本文件。文本文件被命名为 0, 4, 8, 12, ..180.txt
。先是dir
returns0
,然后是100
,然后是104
等等。为什么会这样?
如果您对文件的顺序很敏感并且您已经知道它们的名字,您根本不必使用dir
:
for ii=0:4:180
filename = sprintf('%d.txt', ii);
fid = fopen( fullfile('/path/to', filename), 'r' );
% ... do the processing here
fclose(fid);
end
Lexicographical ordering 通过仅查看做出决定所需的信息来工作。在我们的例子中,信息是文件名中字符的 ASCII 值。考虑以下示例:
如果我们有两个文件名10.txt
和2.txt
,列表机制将比较这些文件的第1st字符,即 1
与 2
,并将 return 取最小者,在这种情况下是属于 10.txt
的 1
。
如果我们有 2.txt
和 20.txt
,则第一个字符相同,因此将比较下一个字符,即 .
或0
。这里,由于 .
的 ASCII 值是 46
而 0
的 ASCII 值是 48
,因此 2.txt
将首先被 returned。
您可以通过始终使用文件名所需的最大位数来解决此问题,这意味着:
0.txt --> 000.txt
4.txt --> 004.txt
25.txt --> 025.txt
180.txt --> 180.txt
然后文件将return按预期顺序编辑。
我正在 MATLAB 中使用 dir('*.txt')
从文件夹中读取文本文件。文本文件被命名为 0, 4, 8, 12, ..180.txt
。先是dir
returns0
,然后是100
,然后是104
等等。为什么会这样?
如果您对文件的顺序很敏感并且您已经知道它们的名字,您根本不必使用dir
:
for ii=0:4:180
filename = sprintf('%d.txt', ii);
fid = fopen( fullfile('/path/to', filename), 'r' );
% ... do the processing here
fclose(fid);
end
Lexicographical ordering 通过仅查看做出决定所需的信息来工作。在我们的例子中,信息是文件名中字符的 ASCII 值。考虑以下示例:
如果我们有两个文件名
10.txt
和2.txt
,列表机制将比较这些文件的第1st字符,即1
与2
,并将 return 取最小者,在这种情况下是属于10.txt
的1
。如果我们有
2.txt
和20.txt
,则第一个字符相同,因此将比较下一个字符,即.
或0
。这里,由于.
的 ASCII 值是46
而0
的 ASCII 值是48
,因此2.txt
将首先被 returned。
您可以通过始终使用文件名所需的最大位数来解决此问题,这意味着:
0.txt --> 000.txt
4.txt --> 004.txt
25.txt --> 025.txt
180.txt --> 180.txt
然后文件将return按预期顺序编辑。