查找一个目录下所有带扩展名的文件,并允许用户选择一个设置为 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
我有一个 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