如何在TCL中写入CSV文件,我需要将数据放入CSV文件中我以前从未使用过CSV。
答案 0 :(得分:2)
CSV使用起来非常棘手。你不能盲目地用逗号连接元素,因为数据中可能包含逗号:
set data {42 "value,with,commas" {value "with quotes"}}
puts [join $data ,]
42,value,with,commas,value "with quotes"
这不是正确数量的字段。所以,让我们引用每个元素。
puts [join [lmap elem $data {format {"%s"} $elem}] ,]
"42","value,with,commas","value "with quotes""
但现在内部引号被破坏,因此CSV惯例是将双引号加倍。
puts [join [lmap elem $data {format {"%s"} [string map {{"} {""}} $elem]}] ,]
"42","value,with,commas","value ""with quotes"""
如果过度引用,现在这是正确的CSV。
或者,正如科林所说,使用csv
package require csv
puts [csv::join $data]
42,"value,with,commas","value ""with quotes"""
或者,如果您已有表示数据的列表列表
set data2 {{a b c} {d e f} {g h i}}
puts [csv::joinlist $data2]
a,b,c
d,e,f
g,h,i
答案 1 :(得分:1)