我尝试运行一个Tcl脚本,该脚本从输入文件(定义几何图形)创建几何文件。该脚本可以简单地作为script.tcl输入文件运行。 当我使用wish或tclsh命令运行它(在Mac和Linux上)时,我收到此错误:
can't read "startreg(1)": no such variable
while executing
"if { $startreg($i)==0 && $stopreg($i)==0 } {
# All are material 1, change nothing
} else {
for {set iz $startz($i)} {$iz<=$stopz($i)} {incr i..."
invoked from within
"if [string compare $descrip regions]==0 {
# Get the mednum, start and stop regions
seek $fileid $startpos start
while { [eof $fileid] != 1 } {
..."
(procedure "read_inputfile" line 214)
invoked from within
"read_inputfile "
invoked from within
"if [file exists $inputfile]==1 {
read_inputfile
} else {
puts "The file $inputfile doesn't exist!"
exit
}"
(file "~/EGS_Windows/preview3d.tcl" line 580)
任何帮助/建议都将受到高度赞赏! TA
答案 0 :(得分:2)
您显然从未初始化该变量。
% array set startreg {}
% puts $startreg(1)
can't read "startreg(1)": no such element in array
% unset startreg
% puts $startreg(1)
can't read "startreg(1)": no such variable
startreg
是一个全局变量,你忘了在proc中global startreg
吗?
我注意到stacktrace中的另一个错误
if [string compare $descrip regions]==0 {
您肯定需要在条件周围使用大括号,以便在您希望执行测试时执行测试:
if {[string compare $descrip regions]==0} {
这适用于所有if
表达式以及所有expr
次会话。请参阅此Wiki页面:http://wiki.tcl.tk/10225
在这种情况下,if {$descrip eq "regions"}
更清晰。