2011-04-11 5 views
5

TCL 목록이 있다고 가정 해 보겠습니다. 일부 목록을 내 목록에 추가했습니다. 이제 6 개 또는 7 개의 요소를 추가했는지 확인하고 싶습니다.목록 요소가 TCL에 있는지 확인하는 방법은 무엇입니까?

은 목록 요소 인덱스로 지정된 위치에 존재하는지 확인하기 위해 내가 사용하고 있습니다 :

if { [info exists [lindex $myList 6]] } { 
#if I am here then I have appended 7 elems, otherwise it should be at least 6 
} 

그러나 실밥이 작동하지 않습니다. 어떻게해야합니까? 정확히? 을 확인하는 확인 된 경우 {[LINDEX의 $ myList를 6] EQ ""}

답변

4

목록의 길이를 확인하는 대신 에 특정 항목이 있는지 확인하고 싶었 기 때문에이 질문을 발견했습니다.

는 요소가리스트 내에서 존재하는 경우 lsearch 기능 사용을 참조하십시오 : 지정된 요소가 발견되지 않은 경우

if {[lsearch -exact $myList 4] >= 0} { 
    puts "Found 4 in myList!" 
} 

lsearch 함수는 첫 번째 발견 요소 또는 -1의 인덱스를 반환합니다. -exact, -glob (기본값) 또는 -regexp 옵션을 통해 패턴 검색 유형을 지정할 수 있습니다.

14

왜 당신이 목록의 길이를 확인하는 llength를 사용하지 않는 다음의 경우, 물론

if {[llength $myList] == 6} { 
    # do something 
} 

을 특정 색인에서 요소를 확인한 다음 lindex을 사용하여 해당 요소를 검색하고이를 확인하십시오. 예 : if {[lindex $myList 6] == "something"}

info exists 명령이 변수가 있는지 확인하기 때문에 info exists을 사용하는 코드가 작동하지 않습니다. 따라서 기본적으로 이름이 [lindex $myList 6]에 의해 반환 된 값과 같은 변수가 있는지 확인합니다.

+0

내 "무언가"를 의미합니까? if {[lindex $ myList 6]] eq ""}를 사용하여 7 번째 elem이 존재하는지 확인합니다. 그것이 존재하지 않으면 if 문의 본문에 있습니다. 사용하는 것이 좋습니다? – Narek

+0

"무언가"는 필자가 선택한 임의의 문자열입니다. 물론 원하는 문자열로 바꿀 수 있습니다. 'if {[lindex $ myList 6]] == ""}'이 가장 잘 작동하지만 결함이 있습니다. 다음리스트를 가지고 있다고 가정 해보자 :'set l {1 2 3 4 5 6 ""}'. 이리스트에는 7 개의 요소가 있습니다 ('llength $ l'의 출력을 확인하십시오). 그러나 코드는이 목록을 마치 6 개의 요소 만있는 것처럼 처리합니다. 요소가 색인'X'에 있는지 확인하려면'llength'를 사용하여 목록이 길어 지는지 확인하십시오. 분명히 더 명확합니다. 요소에 특정 값이 있는지 확인하지 않으려면'lindex'를 사용하십시오. –

+0

감사합니다. – Narek

관련 문제