Tcl lsort不';不能正确地对文件名进行排序

Tcl lsort不';不能正确地对文件名进行排序,tcl,glob,Tcl,Glob,我在存储库文件夹中捕获图片列表,如下所示: foreach image [lsort [glob -nocomplain -directory $image_path -type f *]] { puts $image } 所有的图片都是因为这个原因而被分类的,但是有一些图片根本没有被分类,我也不知道为什么 从文件夹返回的订单为: Repository/Unsorted/3.jpg Repository/Unsorted/30.jpg Repository/Unsorted/33.jp

我在存储库文件夹中捕获图片列表,如下所示:

foreach image [lsort [glob -nocomplain -directory $image_path -type f *]] {
    puts $image
}
所有的图片都是因为这个原因而被分类的,但是有一些图片根本没有被分类,我也不知道为什么

从文件夹返回的订单为:

Repository/Unsorted/3.jpg
Repository/Unsorted/30.jpg
Repository/Unsorted/33.jpg
Repository/Unsorted/6.jpg
Repository/Unsorted/9.jpg 
预期的

Repository/Unsorted/3.jpg
Repository/Unsorted/6.jpg
Repository/Unsorted/9.jpg 
Repository/Unsorted/30.jpg
Repository/Unsorted/33.jpg
更新: 当我使用
-dictionary
开关时,它会返回正确的顺序。有人能详细说明原因吗

foreach image [lsort -dictionary [glob -nocomplain -directory $image_path -type f *]] {
    puts $image
}

lsort
命令有几种方法可以决定元素的顺序

  • -ascii
    (出于各种原因的默认模式,名称稍有错误)仅使用两个字符串中每对字符的数字顺序,即字符串中字符的顺序。如果C
    strcmp()
    …支持Unicode,那么它就是您所期望的

  • -字典
    是相同的…除了字符串中的数字序列(因此只有字符
    0
    9
    ;而不是
    -
    所以没有负数)作为数字进行比较。这给人的排序感觉更像是你在字典里得到的;它专门用来在Tk的文件选择对话框中生成一个令人愉快的文件名顺序

  • 为了完整起见,
    -integer
    -real
    分别将字符串解析为整数和浮点数,然后对它们进行排序,
    -command
    允许您提供自己的排序命令(速度较慢,但完全由您控制)

Tcl知道按什么顺序对值进行排序的唯一原因是您告诉了它


因此,当比较
Repository/Unsorted/3.jpg
Repository/Unsorted/30.jpg
时,在
-ascii
模式下,
(Unicode U+00002E)位于
0
(Unicode U+000030)之前,而在
-dictionary
模式下,
3
30
数字序列被解析为整数,并以这种方式进行比较(因为之前的非数字部分是相同的)。lsort命令有几种方法可以决定元素的顺序

  • -ascii
    (出于各种原因的默认模式,名称稍有错误)仅使用两个字符串中每对字符的数字顺序,即字符串中字符的顺序。如果C
    strcmp()
    …支持Unicode,那么它就是您所期望的

  • -字典
    是相同的…除了字符串中的数字序列(因此只有字符
    0
    9
    ;而不是
    -
    所以没有负数)作为数字进行比较。这给人的排序感觉更像是你在字典里得到的;它专门用来在Tk的文件选择对话框中生成一个令人愉快的文件名顺序

  • 为了完整起见,
    -integer
    -real
    分别将字符串解析为整数和浮点数,然后对它们进行排序,
    -command
    允许您提供自己的排序命令(速度较慢,但完全由您控制)

Tcl知道按什么顺序对值进行排序的唯一原因是您告诉了它


因此,当比较
Repository/Unsorted/3.jpg
Repository/Unsorted/30.jpg
时,在
-ascii
模式下,
(Unicode U+00002E)位于
0
(Unicode U+000030)之前,而在
-dictionary
模式下,
3
30
数字序列被解析为整数,并以这种方式进行比较(因为之前的非数字部分是相同的)。

阅读手册了吗?这里解释得很清楚。@glennjackman-问题是我有两个文件夹中的图像,它们的文件名都是数字,一个按预期的顺序出现,而另一个(我在问题中提到的那个)没有。我无法解释,但字典似乎起作用了。从表面上看,它就像一个标准的文件名。为什么一组像预期的那样回来,而另一组没有?为什么需要切换来对剩余图像进行排序?请这样想:如果按词汇排序(即按字符的ASCII值),则
30
6
之前,因为ASCII值“3”小于ASCII值“6”。-dictionary标志增加了检测字符串中整数的智能(其中数字6明显小于数字30)。@glennjackman-Ah!我懂了。谢谢你的帮助。为了更好地理解ASCII值,我必须去读一下。你读过手册了吗?这里解释得很清楚。@glennjackman-问题是我有两个文件夹中的图像,它们的文件名都是数字,一个按预期的顺序出现,而另一个(我在问题中提到的那个)没有。我无法解释,但字典似乎起作用了。从表面上看,它就像一个标准的文件名。为什么一组像预期的那样回来,而另一组没有?为什么需要切换来对剩余图像进行排序?请这样想:如果按词汇排序(即按字符的ASCII值),则
30
6
之前,因为ASCII值“3”小于ASCII值“6”。-dictionary标志增加了检测字符串中整数的智能(其中数字6明显小于数字30)。@glennjackman-Ah!我懂了。谢谢你的帮助。我必须阅读ASCII值才能更好地理解。文件名在
glob
中的顺序基本上就是操作系统目录列表例程给我们的顺序。这种顺序肯定取决于文件系统的类型,通常也取决于创建的顺序,谁知道呢,可能是月亮的相位和你袜子的颜色。灯火通明