Tcl脚本无法读取" startreg(1)":没有这样的变量

时间:2015-12-17 16:13:11

标签: geometry tcl

我尝试运行一个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

1 个答案:

答案 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"}更清晰。