For loop tcl中的for循环存在问题

For loop tcl中的for循环存在问题,for-loop,tcl,For Loop,Tcl,嗨,我正在尝试以下代码,但我得到一个错误。这是一个我给出参考值的过程,这个过程应该在列表中上移或下移。 代码是: proc getvalue {reference direction} { if {[regexp {(.*)(x.*$)} $reference cellname family string]} { puts $family puts $string } else { puts " No string matched"

嗨,我正在尝试以下代码,但我得到一个错误。这是一个我给出参考值的过程,这个过程应该在列表中上移或下移。 代码是:

proc getvalue {reference direction} {
    if {[regexp {(.*)(x.*$)} $reference cellname family string]} {
        puts $family
        puts $string
    } else {
        puts " No string matched"
    }
    set mylist [T_sel2list [get_lib_cells "*/*${family}*"] ]
    set sorted_finallist [lsort $mylist]
    set i [lsearch $sorted_finallist *$string ]
    if {$direction == "DOWN"} {
        if {$direction == "DOWN" && $i > 0} {
            incr i -1
            set requiredDOWN [lindex $sorted_finallist $i]
            puts "$requiredDOWN"
        }  else {
            puts "First in the line"
        } else {$direction == "UP" && $i >= 0 && $i < [llength $sorted_finallist] -2} {
            incr i
            set requiredUP [lindex $sorted_finallist $i]
            puts "$requiredUP"
        } else {
            puts "Last in the line"
        }
    }
}
proc getvalue{reference direction}{
如果{[regexp{(.*)(x.*$)}$reference cellname family string]}{
放入$family
放入$string
}否则{
放置“没有匹配的字符串”
}
set mylist[T_sel2list[get_lib_cells”*/*${family}*“]]
设置已排序的\u finallist[lsort$mylist]
集合i[lsearch$sorted\u finallist*$string]
如果{$direction==“DOWN”}{
如果{$direction==“DOWN”&&$i>0}{
增量i-1
设置requiredDOWN[lindex$sorted\u finallist$i]
放入“$requiredDOWN”
}否则{
把“排在第一位”
}否则{$direction==“UP”&&$i>=0&&$i<[llength$sorted\u finallist]-2}{
增量i
设置所需设置[lindex$sorted\u finallist$i]
放入“$requiredUP”
}否则{
把“最后一个放在队伍里”
}
}
}
我得到一个错误,说: 错误:错误#args:if命令中“else”子句后的额外单词 有关详细信息,请使用错误信息。(CMD-013)
我不知道for循环有什么问题。谁能帮我一下吗

也许这就是你的意思

if {$direction == "DOWN"} {
    if {$direction == "DOWN" && $i > 0} {
        incr i -1
        set requiredDOWN [lindex $sorted_finallist $i]
        puts "$requiredDOWN"
    } else {
        puts "First in the line"
    }
} else {
    if {$direction == "UP" && $i >= 0 && $i < [llength $sorted_finallist] - 2} {
        incr i
        set requiredUP [lindex $sorted_finallist $i]
        puts "$requiredUP"
    } else {
        puts "Last in the line"
    }
}
如果{$direction==“DOWN”}{
如果{$direction==“DOWN”&&$i>0}{
增量i-1
设置requiredDOWN[lindex$sorted\u finallist$i]
放入“$requiredDOWN”
}否则{
把“排在第一位”
}
}否则{
如果{$direction==“UP”&&$i>=0&&$i<[llength$sorted\u finallist]-2}{
增量i
设置所需设置[lindex$sorted\u finallist$i]
放入“$requiredUP”
}否则{
把“最后一个放在队伍里”
}
}

嗯,您可能想用
elseif
替换一些
else
。我将所有其他项都改为elseif,但最后一项除外,错误消息不会出现。对于向下选项,该过程工作正常,但对于向上选项,它不显示任何输出,也不显示任何错误消息。for循环没有进入以下行:}else{$direction==“UP”&&$i>=0&&$i<[llength$sorted\u finallist]-2}{这是因为如果
$direction
DOWN
,则只输入那些
if
子句,否?