tcl tablelist删除具有特定条目的所有行

时间:2017-12-05 08:21:16

标签: tcl tk

有一个tablelist我想删除第一列中包含字符串的所有行。

set Joints      [.dsm.nb.f11.jointData_f11 getcolumns cJoint  ]
set killrow 0
foreach Joint $Joints {                                
         if { $Joint eq "" } {                                        
               .dsm.nb.f11.jointData_f11 delete $killrow $killrow 
         }
              incr killrow        
}

问题是当行被删除时,表的行索引会发生变化,因此在第一个删除命令之后,所有内容都会变得混乱。处理这个问题的最佳方法是什么?是否有我可以使用的内置功能?

1 个答案:

答案 0 :(得分:2)

使这项工作最简单的方法是向后浏览列表。 lreverse帮了很多忙。

set Joints [.dsm.nb.f11.jointData_f11 getcolumns cJoint]
set killrow 0
set rowsToKill {}
foreach Joint $Joints {
    if {$Joint eq ""} {
        lappend rowsToKill $killrow
    }
    incr killrow
}
foreach killrow [lreverse $rowsToKill] {
    .dsm.nb.f11.jointData_f11 delete $killrow $killrow
}

是的,你在列表上迭代了几次。这样做比以其他任何方式更简单。