2017-12-05 2 views
0

Mit einer Tabellenliste Ich möchte alle Zeilen löschen, die eine Zeichenfolge in der ersten Spalte enthalten.tcl tablelist alle Zeilen mit einem bestimmten Eintrag löschen

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   
} 

Das Problem ist, dass die Zeilenindizes der Tabelle ändert, während Zeilen gelöscht werden, so dass nach dem ersten Löschbefehl alles upp messd wird. Was ist der beste Weg, um mit diesem Problem umzugehen? Gibt es eine eingebaute Funktion, die ich verwenden könnte?

+1

Löschen Sie sie einfach rückwärts vom Ende. –

Antwort

1

Der einfachste Weg, diese Arbeit zu machen, ist, rückwärts durch die Liste zu gehen. lreverse hilft viel.

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 
} 

Ja, Sie wiederholen die Liste ein paar Mal. Es ist noch einfacher, es auf diese Weise zu machen, als es zu versuchen.

+0

'tablelist' lässt den Benutzer eine Liste von Zeilen löschen, so dass die letzte Schleife durch' .dsm.nb.f11.jointData_f11 delete $ rowsToKill' ​​ersetzt werden kann. –

Verwandte Themen