查找一个目录下所有带扩展名的文件,并允许用户选择一个设置为 TCL 中的变量

Find all files in a directory with an extension, and allow user to choose one to be set to a variable in TCL

我有一个 TCL 脚本 运行,该脚本来自一个目录,其中可以包含数量可变的 .txt 文件。我知道下面的TCL命令returns当前目录下的所有.txt文件-

    glob *.txt

但是,如果有多个文本文件,我需要用户选择哪个文件来设置一个等于该文件名的变量名。

例如,假设我有一个目录

    info1.txt
    info2.txt
    info3.txt

我需要有一种方法让用户选择其中一个文件来将 VAR 设置为文件名。

我也知道在这种情况下,glob *.txt 输出将是:

    info1.txt info2.txt info3.txt

因为我是 TCL 的新手,所以我对如何实现这一目标感到困惑。我在想也许让用户按 1 表示 file1,按 2 表示 file2,依此类推,因为它们在 glob *.txt

的输出中由空格分隔

谢谢!

下面是获取标准输入和读取文件的一些示例代码。您要查找的命令是 "gets".

glob.tcl

#!/usr/bin/tclsh

set files [glob *.txt]

set len [llength $files]
if {$len == 0} {
        puts "no files"
} elseif {$len == 1} {
        puts "found 1 file. [lindex $files 0]"
} else {
        for {set i 1} {$i <= $len} {incr i} {
                puts "${i}. [lindex $files $i-1]"
        }
        puts "Enter file number to view or 'q' to quit."
        while {[set n [gets stdin]]  != "q"} {
                if {[catch {set filename [lindex $files $n-1]} err] || $filename == ""} {
                        puts "Error selecting #${n}."
                } else {
                        set fp [open $filename r]
                        set file_data [read $fp]
                        close $fp
                        puts "Contents of ${filename}."
                        puts $file_data
                        break
                }
        }
}

输出:

./glob.tcl
1. test.txt
2. test2.txt
3. test3.txt
4. test4.txt
Enter file number to view or 'q' to quit.
a
Error selecting #a.
q
% ./glob.tcl
1. test.txt
2. test2.txt
3. test3.txt
4. test4.txt
Enter file number to view or 'q' to quit.
1
Contents of test.txt.
hello world
hello world2