2017-04-13 8 views
0

텍스트 파일에서 값을 가져 와서 루프에서 변수를 얻기 위해 변수에 할당하고 싶습니다. data.text 파일은 두 개의 열이 나는 다음 다음 값 연령을 가지고 $age에 할당이에서 이름을 선택하고 $name에 할당 할 파일에서 값을 가져 와서 변수에 지정하고 루프에서 실행하는 방법

 
Name, Age 
ABC , 31 
def , 41 
ghi  , 51 

가 포함되어 있습니다. 나는 파일의 끝까지 이러한 순서를 가져올 것이다.

나는 foreach & 라인을 사용하여 시도하지만 어쩌면이 정규식 또는 목록 만

를 CSV처럼 보이는 샘플 프로그램

답변

1

에 도움을 주시기 바랍니다 그것을 사용하는 방법을 잘하지를 사용하여 가능하다 전체 라인을 가져올 수 파일. 이를 위해 proper CSV parser을 사용하고 싶습니다.

lassign [lmap value [csv::split $line] {string trim $value}] name age 

그러나 그것은 순수하게 정제입니다 :

package require csv 

set f [open "data.text"] 

# Skip the header line; we could parse it, but we won't 
gets $f 

# Parse the remaining lines 
while {[gets $f line] >= 0} { 
    lassign [csv::split $line] name age 
    # Your data has extra spaces in it, it seems; we deal with that here 
    set name [string trim $name] 
    set age [string trim $age] 
    # Now we'll do something with that 
    puts "name is '$name', age is '$age'" 
} 
close $f 
은 Tcl 8.6

, 당신은 더 직접적으로 트리밍 통합 할 수 있습니다. ( lmap이없는 전에 8.5, 당신은 foreach로 쓸 수 등등,하지만 진짜 포인트가 없습니다,. 두 필드가있을 때 당신이 그것을하지 않고 직접 충분히 코드를 작성할 수 있습니다)에 대한

+0

감사를 당신의 도움. 하지만 안타깝게도 제 소프트웨어에는 번들로 제공되는 CSV 패키지가 없습니다. 그 때문에 위의 코드를 사용할 수 없습니다. 이 문제를 해결할 다른 방법이 있습니까? 아래 코드를 사용했지만 이름과 나이를 개별적으로 지정할 수 없습니다. 내 코드가 전체 라인을 읽고 이름 및 시간대에 배치합니다. 텍스트 상자 세트 이름 [open data.txt r] set file_data [read $ Name] foreach line $ file_data { set -widget m_Name - 값 $ line #Entering Name in 텍스트 상자 -widget m_Age - 값 $ line } – Raj

+0

안녕하세요, 선생님, 제 질문에 대한 답변을 찾았습니다. 아래를 참조하십시오. 그러나 여전히 전체 신용은 당신에게갑니다. 당신의 도움을 주셔서 감사합니다.lassign $ line 이름 이름 은 "a = $ Name b = $ Name"을 넣습니다. } 닫기 $ (이 파일을 열거 나 저장하지 마십시오.) foreach line [split [string $ [읽기 $ chan] file_open – Raj