Tcl 如何使用foreach循环逐个读取两个文件的内容?

Tcl 如何使用foreach循环逐个读取两个文件的内容?,tcl,expect,Tcl,Expect,我的TCL脚本: 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内

我的TCL脚本:

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
google.com yahoo.com metlife.com cisco.com span.com
网站\u name1.txt
内容:

apple orange mango litchi banana
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
但我试图获得如下所示的输出:

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

您的代码存在许多问题。您在第二个循环中使用的是
$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

您可以使用上述格式的
foreach
循环浏览两个(或更多)列表,即:

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

如果列表中的元素数量不相同,那么您将开始在列表的变量名中获得元素数量较少的空字符串。

也可以使用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

请注意,这种方法循环使用文件中的单词,而不是行。如果您在fruits.txt中有“granny smith apple”,那么您的输出可能不是您所期望的。