如何从文件中获取值并分配给变量并在循环中运行

时间:2017-04-13 18:10:22

标签: file tcl file-handling

我想从文本文件中获取值并分配给循环中的变量如何实现它。 data.text文件包含两列

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

我想从中挑选名称并指定给$name 然后采用下一个值年龄并分配给$age。我将通过序列获取这些直到文件结尾。

我尝试使用foreach&行,但能够获取完整的行可能这可以通过使用正则表达式或列表,但不知道如何使用它

请帮助您提供示例程序

1 个答案:

答案 0 :(得分:1)

这看起来像一个CSV文件。您想使用proper CSV parser

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,您可以更直接地整合修剪:

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

但这纯粹是一种改进。 (8.5之前没有lmap;你可以foreach编写它等等,但是没有真正的意义;你可以直接编写代码而不用它当只有两个字段时。)