tcl tablelist 删除具有特定条目的所有行
tcl tablelist delete all rows with certain entry
有一个 table 列表,我想删除第一列中包含字符串的所有行。
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
}
问题是 table 的行索引在行被删除时发生变化,因此在第一个删除命令之后,一切都变得一团糟。处理这个问题的最佳方法是什么?有我可以使用的内置功能吗?
完成这项工作的最简单方法是向后遍历列表。 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
}
是的,您在列表上迭代了几次。以这种方式做仍然比尝试以其他方式做更简单。
有一个 table 列表,我想删除第一列中包含字符串的所有行。
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
}
问题是 table 的行索引在行被删除时发生变化,因此在第一个删除命令之后,一切都变得一团糟。处理这个问题的最佳方法是什么?有我可以使用的内置功能吗?
完成这项工作的最简单方法是向后遍历列表。 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
}
是的,您在列表上迭代了几次。以这种方式做仍然比尝试以其他方式做更简单。