Matlab dir(';*.txt';)命令未按顺序列出txt文件

Matlab dir(';*.txt';)命令未按顺序列出txt文件,matlab,directory,directory-listing,lexicographic,Matlab,Directory,Directory Listing,Lexicographic,我正在使用MATLAB中的dir('*.txt')从文件夹中读取文本文件。文本文件名为0,4,8,12,…180.txtdir首先返回0,然后返回100,然后返回104,依此类推。为什么会发生这种情况?如果您对文件的顺序很敏感,并且您已经知道它们的名称,那么您根本不必使用dir: for ii=0:4:180 filename = sprintf('%d.txt', ii); fid = fopen( fullfile('/path/to', filename), 'r' );

我正在使用MATLAB中的
dir('*.txt')
从文件夹中读取文本文件。文本文件名为
0,4,8,12,…180.txt
dir
首先返回
0
,然后返回
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

如果您对文件的顺序敏感,并且您已经知道它们的名称,那么您根本不必使用
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
通过只查看决策所需的信息来工作。在我们的例子中,信息是文件名中字符的ASCII值。考虑下面的例子:

  • 如果我们有两个文件名
    10.txt
    2.txt
    ,列表机制将比较这些文件的第一个字符,即
    1
    2
    ,并将返回最小的一个,在本例中,这是属于
    10.txt
    1

  • 如果改为使用
    2.txt
    20.txt
    ,则第一个字符相同,因此将比较下一个字符,即
    0
    。这里,由于
    的ASCII值是
    46
    ,而
    0
    的ASCII值是
    48
    ,因此将首先返回
    2.txt

您可以通过始终为文件名提供所需的最大位数来解决此问题,这意味着:

0.txt-->000.txt
4.txt-->004.txt
25.txt-->025.txt
180.txt-->180.txt
然后文件将按预期顺序返回。

只查看决策所需的信息。在我们的例子中,信息是文件名中字符的ASCII值。考虑下面的例子:

  • 如果我们有两个文件名
    10.txt
    2.txt
    ,列表机制将比较这些文件的第一个字符,即
    1
    2
    ,并将返回最小的一个,在本例中,这是属于
    10.txt
    1

  • 如果改为使用
    2.txt
    20.txt
    ,则第一个字符相同,因此将比较下一个字符,即
    0
    。这里,由于
    的ASCII值是
    46
    ,而
    0
    的ASCII值是
    48
    ,因此将首先返回
    2.txt

您可以通过始终为文件名提供所需的最大位数来解决此问题,这意味着:

0.txt-->000.txt
4.txt-->004.txt
25.txt-->025.txt
180.txt-->180.txt

然后,文件将按预期顺序返回。

这就是词典排序的工作原理……这就是词典排序的工作原理。。。