2017-12-05 3 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   
} 

문제는 테이블 변경의 행 인덱스 행이 삭제다면 것을 첫 번째 삭제 명령의 모든 UPP를 messd 도착 후되도록. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 내가 사용할 수있는 빌드가 있습니까?

+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'로 대체 될 수 있습니다. –

관련 문제