来自foreach循环的意外复合结果

时间:2015-09-18 16:04:47

标签: foreach append tcl

以下代码段正在处理UTF8编码的文本文件(为医院数据构建HL7段,仅供参考):

set linecounter 0
set newmsg ""

foreach line [split $data \n] {
    incr linecounter
    set seg [append "OBX|"  $linecounter "|" [string trimright $line] "||||||V" \n]
    lappend newmsg $seg
}

echo "This is the new message: " $newmsg

如果我回显出循环中的每个$seg,我会在文本文件中获得每一行,如此(当然是文件内容):

line1
line2
line3
etc...

完成循环后,$newmsg读作:

line1

line1
line2

line1
line2
line3
etc...

我已将lappend更改为append,将set $seg更改为""后将其附加到循环内的$newmsg,但都无济于事。想法?

1 个答案:

答案 0 :(得分:1)

我想,你正在寻找这样的东西:

set data "hello\nworld\nits\nme\nalex"

set linecounter 0
set newmsg ""

foreach line [split $data \n] {
    incr linecounter
    set seg "OBX|$linecounter|[string trimright $line]||||||V\n"
    append newmsg $seg
}

puts "This is the new message: $newmsg"

这将在其中创建带\ n换行符的字符串。 此代码的示例输出:

This is the new message: OBX|1|hello||||||V
OBX|2|world||||||V
OBX|3|its||||||V
OBX|4|me||||||V
OBX|5|alex||||||V

由于两个原因你得到了奇怪的输出: 1. append需要变量名作为第一个参数。所以OBX |是它的名字,它的内容是在循环中增长的。 2.用于用{}

包装其项目的echo列表