TCL:如何读取文件的每一行并拆分每一列并将其保存为变量

时间:2016-06-01 09:05:51

标签: tcl tk

我想一次读取一行文件,拆分列并将其保存在变量中。 文件看起来像这样:

%% cat Memory_minus.list
MEM_rf_2p_hce_1024x8_naxos1           RF           dual_port    1024  8 
MEM_rf_2p_hce_128x18_naxos1           RF           dual_port    128  18
MEM_rf_2p_hce_16x128_fusion           RF           dual_port    16   128 
MEM_rf_2p_hce_16x80_fusion4           RF           dual_port    16   80
MEM_rf_2p_hce_256x18_naxos1           RF           dual_port    256  18 
MEM_rf_2p_hce_256x8_naxos1            RF           dual_port    256  8

在一个foreach循环中(一行)我希望将所有5列转换为变量,例如对于第一行,每个变量应该返回以下。

puts $var1 ->>> MEM_rf_2p_hce_1024x8_naxos1
puts $var2 ->>> RF
puts $var3 ->>> dual_port
puts $var4 ->>> 1024
puts $var5 ->>> 8

我尝试编写代码来逐行读取文件然后提取项目但是没有用。

set f [open Memory_minus.list]
while {1} {
    set line [gets $f]
    if {[eof $f]} {
        close $f
        break
    }
    #set base_name [exec awk {{print $1}} $line ]
    foreach lt $line {
        puts $lt
    }
}

$ lt返回整个加扰输出。

1 个答案:

答案 0 :(得分:1)

set fp [open input.txt r]
while {[gets $fp line]!=-1} {
    # To make sure that the line has five words
    if {[llength $line]!=5} {
        puts "Incorrect format in the line -> '$line'"
        continue
    }
    foreach {var1 var2 var3 var4 var5} $line {
        puts ->>>$var1;puts ->>>$var2;puts ->>>$var3;puts ->>>$var4;puts ->>>$var5;
    }
}
close $fp

输出(仅显示第一行的输出)

->>>MEM_rf_2p_hce_1024x8_naxos1
->>>RF
->>>dual_port
->>>1024
->>>8