我在我的TCL脚本中使用这两个包,CSV和struct::matrix
。
并使用此命令::csv::read2matrix ? -alternate ? chan m {sepChar ,} {expand none}
这里我想使用分号作为分隔字符,但解释器将分号解释为“语句结束”。因此,它不会将{expand none}
识别为命令的一部分。
我希望我解释了我的问题。有什么方法可以使用分号作为分隔符?我试过在双引号之间使用它。
是否可以使用空格作为分隔符?我试过“但是没有用。”
我的代码是这样的:
proc updatecsv {} {
set csvfile "pathto/mycsvfile/csv.csv"
set value "6 field"
struct::matrix data
set f [open $csvfile]
csv::read2matrix $f data \; auto
close $f
set updateddata {}
foreach key [data get column 0] {
lappend updateddata $value
}
data add column $updateddata
set f [open $csvfile w]
csv::writematrix data $f
close $f
}
我的csv格式为:
1;101;1 value;2 value;3 value;1 value;4 value;
2;101;1 value;2 value;3 value;1 value;4 value;
3;101;1 value;2 value;3 value;1 value;4 value;
4;101;1 value;2 value;3 value;1 value;4 value;
5;101;1 value;2 value;3 value;1 value;4 value;
我必须再添加一列
答案 0 :(得分:0)
尝试使用\
转义分号。您可以使用{\;}
或"\\;"
答案 1 :(得分:0)
您正在查看的“命令”是正式参数列表,而不是调用。大括号中的参数不是是必需的; ?
和{
括号}
之间的部分是可选的。其中一些参数的默认值是那些支撑位的第二个字。要以分号作为分隔符使用它,请执行以下操作:
set chan [open $someFilename]
set m [struct::matrix]
::csv::read2matrix chan m ";"
close $chan
# Do stuff with $m now...
请记住:;
是“命令结束”的Tcl元字符(就像换行符一样)所以要将它用作普通字符,必须引用它。把它放在双引号中是理想的。
这只是为了读取值。当写出来时,如果你不想要默认值(,
), 也必须指定分隔符。
::csv::writematrix $m $chan ";"