2013-08-23 60 views
3

我写了一个Tcl代码,它给了我如下的输出。我非常接近我需要的东西。 代码:Tcl脚本来纠正我的输出

for { set row 0 } { $row < 3 } {incr row } { 
set row[expr {$row + 1}] [lindex $sub_list $row] 
puts "row[expr {$row + 1}] [lindex $sub_list $row]" 
set pattern_number [llength [lindex $sub_list $row]] 
puts "pattern_number = $pattern number" 
set pattern_index [lindex $sub_list $row] 

    for {set p 0} { $p < $pattern_number} {incr p} { 
     set pattern[expr {$p + 1}] [lindex $pattern_index $p] 
     puts "pattern[expr {$p + 1}] [lindex $pattern_index $p]" 
    } 

} 

上面的代码的输出:

Row1 A B C D 
pattern number = 4 
pattern1 A 
pattern2 B 
pattern3 C 
pattern4 D 

Row2 P Q R S 
pattern number = 4 
pattern1 P 
pattern2 Q 
pattern3 R 
pattern4 S 

Row3 W X Y 
pattern number = 3 
pattern1 W 
pattern2 X 
pattern3 Y 

相反,我想要的代码给我的输出如下:

Row1 A B C D 
pattern number = 4 
pattern1 A 
pattern2 B 
pattern3 C 
pattern4 D 

Row2 P Q R S 
pattern number = 4 
pattern5 P 
pattern6 Q 
pattern7 R 
pattern8 S 

Row3 W X Y 
pattern number = 3 
pattern9 W 
pattern10 X 
pattern11 Y 

请建议我应该怎么办

+0

...你没有提供任何代码。您不需要重置您附加到Pattern的变量,但如果您不提供任何代码,我们无法帮助您。 – PherricOxide

+0

PherricOxide:我已经在Johannes的钱上添加了参考号为 – user2643899

回答

1
  1. 使用foreach
  2. 不要复位变量

所以,你的代码就变成了:

set rownr 0 
set patnr 0 
foreach row $sub_list { 
    incr rownr 
    puts "Row$rownr $row" 
    puts "pattern number = [llength $row]" 
    foreach pattern $row { 
     incr patnr 
     puts "pattern$patnr $pattern" 
    } 
} 

如果您想进一步处理这一点,让我知道你需要这一点。
(我假设你并不是真的想动态地生成变量名称。)

+0

的代码,非常感谢!现在我得到了我需要的东西。在上面的例子中,3是硬编码的。其实这个价值来自一个变量。但在你的代码中,我甚至没有指出它仍然工作正常。 – user2643899