如何将整个文件作为参数传递给 tcl 脚本?
How can I pass an entire file as an argument to a tcl script?
我有一个脚本说,myscript.tcl。该脚本将遍历一个文件并执行一些基本操作。但我不想用 "open myfile.txt" 之类的东西在脚本中硬编码文件名。我希望能够在 运行 时从命令行将不同的文件传递给脚本。我如何实现这一目标?请帮忙。
用tclsh myscript.tcl myfile.txt
调用脚本,在脚本中:
lassign $argv filename
set fid [open $filename]
如果要传递多个文件名:tclsh myscript.tcl file1 file2 file3
foreach filename $argv {
puts "Operating on: $filename"
set fid [open $filename]
# ...
}
脚本文件名之后的所有 tclsh 参数都作为一个列表存储在全局 Tcl 变量 argv
中(并且该列表的长度放在 argc
中;您不需要需要它,因为 Tcl 列表知道它们自己的长度)。这意味着您可以使用正常的列表处理命令,例如 lindex
、lassign
或 foreach
来访问该列表中的值:
set filename [lindex $argv 0]
puts "The filename is \"$filename\""
set f [open $filename]
set line [read $f]
puts "The first line of \"$filename\" is \"$line\""
我有一个脚本说,myscript.tcl。该脚本将遍历一个文件并执行一些基本操作。但我不想用 "open myfile.txt" 之类的东西在脚本中硬编码文件名。我希望能够在 运行 时从命令行将不同的文件传递给脚本。我如何实现这一目标?请帮忙。
用tclsh myscript.tcl myfile.txt
调用脚本,在脚本中:
lassign $argv filename
set fid [open $filename]
如果要传递多个文件名:tclsh myscript.tcl file1 file2 file3
foreach filename $argv {
puts "Operating on: $filename"
set fid [open $filename]
# ...
}
脚本文件名之后的所有 tclsh 参数都作为一个列表存储在全局 Tcl 变量 argv
中(并且该列表的长度放在 argc
中;您不需要需要它,因为 Tcl 列表知道它们自己的长度)。这意味着您可以使用正常的列表处理命令,例如 lindex
、lassign
或 foreach
来访问该列表中的值:
set filename [lindex $argv 0]
puts "The filename is \"$filename\""
set f [open $filename]
set line [read $f]
puts "The first line of \"$filename\" is \"$line\""