2014-09-12 72 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