2017-12-05 11 views
0

テーブルリストを持つ最初の列に文字列を含むすべての行を削除したいとします。tcl 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   
} 

最初の削除コマンドの後にすべてがmessd UPPを取得するように行は、削除されます中に問題があること、テーブルの変更の行インデックスです。この問題に対処する最善の方法は何ですか?私が使うことができる機能のビルドはありますか?

+1

最後から末尾まで削除してください。 –

答えて

1

この作業を行う最も簡単な方法は、リストを後方に移動することです。 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 
} 

はい、あなたはリストを何度か反復しています。このようにするのは、他のことをやろうとするよりも簡単です。

+0

'tablelist'はユーザが行のリストを削除できるようにするため、最後のループは' .dsm.nb.f11.jointData_f11 delete $ rowsToKill'​​で置き換えることができます。 –

関連する問題