从tcl / tk中的列表中的inremental赋值变量值

时间:2015-07-09 06:07:32

标签: tcl tk

我对我在Tcl / tk的工作有疑问 它转到名为sPnflds的第二行变量。 将新值分配给变量sPn和sTitlePdf。 其他行将起作用。 此过程将继续,直到完全读取所有sPflds变量行。 (此过程将对整个sPflds列重复)

set f [open "c:/temp/labels.txt" r]
set contents [encoding convertto utf-8 [read $f]]
close $f
set labels [split $contents \n]
#puts $labels
#start of loop for first line (in labels variable)
set sPnflds [split $labels ","]
set sPn [lindex $sPnflds 0]
set sTitlePdf [lindex $sPnflds 1]
puts $sTitlePdf
puts $sPn

1 个答案:

答案 0 :(得分:0)

我觉得你的问题很难理解。您必须显示一些数据。

我假设您要迭代文件的行(您的代码中实际上没有循环)。
我假设每行上有2个以逗号分隔的字段,你想要捕获到这些变量中。

这样的事情:

% exec cat labels.txt
1,hello
2,world
3,foo
4,bar
% set f [open labels.txt]
file5
% set contents [encoding convertto utf-8 [read -nonewline $f]]
1,hello
2,world
3,foo
4,bar
% close $f
% set labels [split $contents \n]
1,hello 2,world 3,foo 4,bar
% foreach row $labels {
    lassign [split $row ,] sPn sTitlePdf
    puts "<$sPn> <$sTitlePdf>"
}
<1> <hello>
<2> <world>
<3> <foo>
<4> <bar>

你会注意到我添加了-nonewline选项来阅读。

的一个问题
set data [read $filehandle]
set lines [split $data \n]

是你得到一个空行作为lines列表的最后一个元素。默认情况下,read命令会为您提供带有尾随换行符的数据。迭代文件行的首选方法是:

set f [open filename]
while {[gets $f line] != -1} {
    do something with $line
}
close $f

假设文件内容适合内存,它会慢一些。