2014-09-12 66 views
2

我的TCL腳本:如何使用foreach循環逐個讀取兩個文件中的內容?

set a [open fruits.txt r] 
set b [read $a] 
foreach c $b { 
    puts "Fruits : $c" 

    set website [open website_name1.txt r] 
    set each_one [read $website] 
    foreach each $each_one { 
     puts "website name : $c" 
    } 
} 

fruits.txt內容:

apple orange mango litchi banana 

website_name1.txt內容:

google.com yahoo.com metlife.com cisco.com span.com 

現在,如果我運行上面的腳本,我得到的輸出,如下圖所示:

D:\Desktop>tclsh statck_qns.tcl 
Fruits : apple 
website name : apple 
website name : apple 
website name : apple 
website name : apple 
website name : apple 
Fruits : orange 
website name : orange 
website name : orange 
website name : orange 
website name : orange 
website name : orange 
Fruits : mango 
website name : mango 
website name : mango 
website name : mango 
website name : mango 
website name : mango 
Fruits : litchi 
website name : litchi 
website name : litchi 
website name : litchi 
website name : litchi 
website name : litchi 
Fruits : banana 
website name : banana 
website name : banana 
website name : banana 
website name : banana 
website name : banana 

D:\Desktop> 

但我試圖讓輸出,如下圖所示:

Fruits : apple 
website name : google.com 
Fruits : orange 
website name : yahoo.com 
Fruits : mango 
website name : metlife.com 
Fruits : litchi 
website name : cisco.com 
Fruits : banana 
website name : span.com 

回答

4

有許多與你的代碼的問題。您在第二個循環中使用$c,而它應該是$each。此外,如果您只想將網站名稱放入一次,則需要獲得一個循環,以便同時在兩個列表中循環。

set a [open fruits.txt r] 
set b [read $a] 

set website [open website_name1.txt r] 
set each_one [read $website] 

foreach c $b each $each_one { 
    puts "Fruits : $c" 
    puts "website name : $each" 
} 

close $a 
close $website 

codepad demo

你可以通過兩個列表(或更多)與foreach環上面的格式,即:

foreach var1 list1 var2 list2 ... varn listn { 
    # code here 
} 

如果元件的數目不在列表中的相同,那麼你將開始在列表的變量名中使用較少的元素獲取空字符串。

+0

非常感謝傑裏...它的作品... – Kumar 2014-09-12 14:09:49

+1

注意,這種方法遍歷的** **的話在文件,而不是**行**。如果你在fruits.txt中有「granny smith apple」,你的輸出可能不會是你所期望的。 – 2014-09-12 15:31:11

1

也可以讀取行由行while循環

set f_fruit [open fruits.txt r] 
set f_web [open website_name1.txt r] 
while {[gets $f_fruit fruit] != -1 && [gets $f_web website] != -1} { 
    puts "Fruits: $fruit" 
    puts "website name: $website" 
} 
close $f_fruit 
close $f_web