如何将目录中的第一个文件设置为 TCL 中的变量?
How do I set my first file in a directory to a variable in TCL?
我想将我目录中的第一个文件设置为一个变量,我该怎么做?
这是我目前尝试过的方法:
set files [glob "./programming/.business_files/*.txt"]
set first_file $files[0]
你的 glob
行是正确的,但顺序不确定(这是 OS 系统调用吐出的任何内容,那些保证 nothing 关于一般顺序)。因此,您可能需要 lsort
文件名列表。为此,强烈建议使用 -dictionary
选项;它产生用户通常认为是文件名自然顺序的顺序。
set files [lsort -dictionary [glob "./programming/.business_files/*.txt"]]
然后你可以用 lindex
得到第一个(因为 Tcl 使用 [
…]
进行命令替换,而不是索引)。
set first_file [lindex $files 0]
如果您想(出于某种原因)保留数组方法,一个不太理想的解决方案是:
set n 0
foreach file [lsort -dictionary [glob "./programming/.business_files/*.txt"]] {
set files($n) $file
incr n
}
set first_file $files(0)
也就是说,上面的 lindex
解决方案是最干净的。
再见
我想将我目录中的第一个文件设置为一个变量,我该怎么做?
这是我目前尝试过的方法:
set files [glob "./programming/.business_files/*.txt"]
set first_file $files[0]
你的 glob
行是正确的,但顺序不确定(这是 OS 系统调用吐出的任何内容,那些保证 nothing 关于一般顺序)。因此,您可能需要 lsort
文件名列表。为此,强烈建议使用 -dictionary
选项;它产生用户通常认为是文件名自然顺序的顺序。
set files [lsort -dictionary [glob "./programming/.business_files/*.txt"]]
然后你可以用 lindex
得到第一个(因为 Tcl 使用 [
…]
进行命令替换,而不是索引)。
set first_file [lindex $files 0]
如果您想(出于某种原因)保留数组方法,一个不太理想的解决方案是:
set n 0
foreach file [lsort -dictionary [glob "./programming/.business_files/*.txt"]] {
set files($n) $file
incr n
}
set first_file $files(0)
也就是说,上面的 lindex
解决方案是最干净的。
再见