2011-04-13 4 views
0

foreach 루프를 사용하여 TCL에 다른 변수 값을 쓰는 방법.
다음은이 상황이다 :TCL의 파일에 다른 변수 값을 쓰는 방법

set data1 "This is Data1 Value\n" 
set data2 "This is Data2 Value" 
set data3 "\nThis is Data3 Value\n" 

foreach different_content {data1 data2 data3} { 

    puts $fo $different_content 
} 
close $fo 
} 

그러나 그것은 작동하지 않습니다.

답변

0

당신은 당신이 $fo으로 언급하는 파일 핸들을 열어야하지만 실제로 열지 않은 : 코드의 조각으로 여러 문제가 있습니다

set data1 "This is Data1 Value\n" 
set data2 "This is Data2 Value" 
set data3 "\nThis is Data3 Value\n" 

set fo [open 'test.txt'] 

foreach different_content {data1 data2 data3} { 
    puts $fo $different_content 
} 

close $fo 
+0

내 코드 사랑하는 시저의 testforeach {} { 설정 파일 이름 /tmp/indrajeet_DBTEST_dbmode.sql 설정 데이터 1을 참조 세트 "이것은 DATA1 값 \ n은" data2 "이것은 data2 값입니다." open ('/ tmp/indrajeet_DBTEST_dbmode.SQL ') foreach는 different_content {데이터 1의 데이터 2} FO 가까운 $} testforeach { 에 $ different_content fo를 $를두고}하지만 사랑하는 작동하지 않습니다, 제발 도와주세요. –

+0

참고 : 여기서 특정 위치, 즉 임시 폴더 내에 파일을 쓰고 싶습니다. –

+0

open 구문이 잘못되었습니다. 이것은 Tcl C/javascript/Java – slebetman

3

. 가장 간단하고 간단한 오류는 fo 파일을 열지 않은 것입니다. 즉 다른 곳에 당신이 여기에 표시되지 않은 코드에서 수행하지 않는 한, 당신은 당신의 foreach 루프 전에

set fo [open test.txt w] 

같은 것을 추가해야합니다.

data1 
data2 
data3 

하지만이 콘텐츠 작성을 위해 아마 당신이 의도 : 여기

This is Data1 Value 

This is Data2 Value 

This is Data3 Value 

를 오류입니다

두 번째 문제는 코드가 파일에이 내용을 작성하는 것입니다 것입니다 더 미묘한. 루프가하는 일은 의 각 변수의 이름으로 different_content을 설정하는 것이지만 값은입니다. 본질적으로 변수 different_content을 이중 참조 해제해야합니다. 변수 이름의 시작 부분에 $을 추가하면 한 수준의 역 참조가 부여됩니다. 불행히도 Tcl을 사용하면 다른 $을 앞으로 치고 두 번째 레벨을 얻을 수 없습니다. 그러나 set 명령을 사용할 수 있습니다. 결국, $set에 대한 syntacic 설탕입니다 : $foo[set foo]와 동일합니다.

puts $fo [set $different_content] 

을 그래서, 모두 함께 넣어 : 따라서, 나는 다음과 같이 루프의 몸을 다시 작성해야 생각

set data1 "This is Data1 Value\n" 
set data2 "This is Data2 Value" 
set data3 "\nThis is Data3 Value\n" 

set fo [open test.txt w] 
foreach different_content {data1 data2 data3} { 
    puts $fo [set $different_content] 
} 
close $fo 
+0

정말 위대한 사람입니다. 감사. U는 정확한 문제를 이해하고 정확한 제안을 주었지만 정상적으로 작동합니다. 너 너무 많이 고마워. –

+0

그가 당신의 질문에 대답한다면, 당신은 그의 대답을 받아 들여야한다. 여러 가지 질문을했지만 다른 질문은 받아 들여지지 않은 것 같습니다. – RHSeeger

2

에릭의 대답은 매우 중요하지만 것을 작성하는 두 가지 방법이있다 foreach 루프 :

방법 1 (초기 변수를 판독)

foreach different_content [list $data1 $data2 $data3] { 
    puts $fo $different_content 
} 

방법 2 (변수라는 별칭을 만들기 위해 upvar 0 사용) :

foreach different_var {data1 data2 data3} { 
    upvar 0 $different_var different_content 
    puts $fo $different_content 
} 
+0

또는 시작시 다른 데이터 구조에 데이터를 저장하십시오. –

+0

@ 글렌 : 예. (연상) 배열을 사용하면 많은 의미가 있습니다. –

관련 문제