有一个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
}
问题是当行被删除时,表的行索引会发生变化,因此在第一个删除命令之后,所有内容都会变得混乱。处理这个问题的最佳方法是什么?是否有我可以使用的内置功能?
答案 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
}
是的,你在列表上迭代了几次。这样做比以其他任何方式更简单。