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
命令有几种方法可以决定元素的顺序
(出于各种原因的默认模式,名称稍有错误)仅使用两个字符串中每对字符的数字顺序,即字符串中字符的顺序。如果C-ascii
…支持Unicode,那么它就是您所期望的strcmp()
是相同的…除了字符串中的数字序列(因此只有字符-字典
到0
;而不是9
所以没有负数)作为数字进行比较。这给人的排序感觉更像是你在字典里得到的;它专门用来在Tk的文件选择对话框中生成一个令人愉快的文件名顺序-
- 为了完整起见,
和-integer
分别将字符串解析为整数和浮点数,然后对它们进行排序,-real
允许您提供自己的排序命令(速度较慢,但完全由您控制)-command
因此,当比较
Repository/Unsorted/3.jpg
和Repository/Unsorted/30.jpg
时,在-ascii
模式下,
(Unicode U+00002E)位于0
(Unicode U+000030)之前,而在-dictionary
模式下,3
和30
数字序列被解析为整数,并以这种方式进行比较(因为之前的非数字部分是相同的)。lsort命令有几种方法可以决定元素的顺序
(出于各种原因的默认模式,名称稍有错误)仅使用两个字符串中每对字符的数字顺序,即字符串中字符的顺序。如果C-ascii
…支持Unicode,那么它就是您所期望的strcmp()
是相同的…除了字符串中的数字序列(因此只有字符-字典
到0
;而不是9
所以没有负数)作为数字进行比较。这给人的排序感觉更像是你在字典里得到的;它专门用来在Tk的文件选择对话框中生成一个令人愉快的文件名顺序-
- 为了完整起见,
和-integer
分别将字符串解析为整数和浮点数,然后对它们进行排序,-real
允许您提供自己的排序命令(速度较慢,但完全由您控制)-command
因此,当比较
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
中的顺序基本上就是操作系统目录列表例程给我们的顺序。这种顺序肯定取决于文件系统的类型,通常也取决于创建的顺序,谁知道呢,可能是月亮的相位和你袜子的颜色。灯火通明