TCL CSV引用字符

时间:2012-09-15 23:19:36

标签: tcl

如何使用csv添加引号:

% package require csv
0.7.3

% set l [list "21" "Some test" "Some test"]
% ::csv::join $l {,} {"}
21,Some test,Some test

我想要输出 “21”,“一些测试”,“一些测试”

3 个答案:

答案 0 :(得分:2)

csv包不提供此类引用,除非您欺骗它。

人们肯定会争辩说它应该只提供一个选项来做,但试试这个:

package require struct::list

set l {1 "Some Text" "Some Test"}
set r [join [struct::list map $l {format {"%s"}}] ","]
puts $r

答案 1 :(得分:0)

诀窍是:

  • 让Tcl不会删除双引号;
  • 禁用csv的转义(默认为"
% set L [list {"21"} {"Some test"} {"Some test"}]
{"21"} {"Some test"} {"Some test"}
% csv::join $L , {}
"21","Some test","Some test"

请注意,这并不能解决您的某个值在中间位置具有"字符的问题 - 如果发生这种情况,您应该以某种方式以目标CSV处理器理解的方式转义此类字符。 / p>

答案 2 :(得分:0)

这个解决方案不是最好的,但有效。可能存在需要注意的极端情况。它不需要更改列表中的项目,也不需要CSV包。

set theList [list "21" "Some test" "Some test"]
set quotedCSV "\"[join $theList {","}]\""
puts $quotedCSV

基本上,quotedCSV = quote + ( theList, separated by quote+comma+quote ) + quote。我的建议是使用CSV,除非你真的需要引号。