如何在:: csv :: read2matrix命令中使用分号作为分隔符?

时间:2014-02-20 05:52:29

标签: csv tcl

我在我的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;

我必须再添加一列

2 个答案:

答案 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 ";"