以下代码段正在处理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
,但都无济于事。想法?
答案 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列表