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

如何在::csv::read2matrix命令中使用分号作为分隔字符?,csv,tcl,Csv,Tcl,我在TCL脚本中使用了这两个包,CSV和struct::matrix 使用这个命令::csv::read2matrix-候补chan m{sepChar,}{expand none} 这里我想使用分号作为分隔符,但解释器将分号解释为“语句结束”。正因为如此,它不能将{expand none}识别为命令的一部分 我希望我能解释我的问题。有没有办法用分号作为分隔符?我试过在双引号之间使用它 有没有可能用空格作为分隔符?我试过“”但没用 我的代码是这样的: proc updatecsv {} { s

我在TCL脚本中使用了这两个包,CSV和
struct::matrix

使用这个命令::csv::read2matrix-候补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;

我必须再添加一列

尝试用
\
转义分号。您可以使用
{\}
“\\;”

查看的“命令”是一个正式的参数列表,而不是调用。不在大括号中的参数是强制性的;
s和
{
大括号
}
之间的部分是可选的。其中一些参数的默认值是这些大括号位的第二个字。要将其与分号一起用作分隔符,请执行以下操作:

set chan [open $someFilename]
set m [struct::matrix]
::csv::read2matrix chan m ";"
close $chan
# Do stuff with $m now...
记住:
是“命令结束”的Tcl元字符(就像换行符一样),所以要将其用作普通字符,必须引用它。把它放在双引号中是理想的

这只是为了在中读取值。在写出它们时,如果不希望使用默认值(a
),还必须指定分隔符


您实际使用的代码是什么?我刚刚尝试了您的代码,它添加了新的列,但在输出中使用逗号而不是分号作为分隔符,如下所示:
1101,1值,2值,3值,1值,4值,6字段
(依此类推)。你得到了什么?@Jerry添加了代码。@Hoodiecrow使用“;”和{;}解释器只是替换了所有;在我的文件中,与您得到的类似(“1101,1值,2值,3值,1值,4值,6字段”)。关于\;解释器给出错误“非法分隔符”\;”,是字符串“是的,您需要使用调用
csv::writematrix data$f{;}
(即,告诉它在将csv数据写入文件时使用分号),否则您将在输出中获得逗号<代码>\或
“;”
也应该可以。甚至是
“;”
{;}
。问题是双引号之间的分号已经尝试过了。@VarunLakkur:OP可能在无效的调用中尝试过,例如
{sepChar”;“}
(不起作用)。没有理由认为
“;”
在正确使用时不起作用。@VarunLakkur我已经试过了。但解释器说‘非法分隔符“\;”,是一个字符串。@Hoodiecrow我已经添加了我的代码,你们可以看看。我在问题中提到我确实使用了双引号。但它没有帮助,它取代了一切;改为文件中的。@hoodie在writematrix命令中提到了这一点。它解决了我的问题。@Abhi我们都不知道你又把它写出来了。这是一个关键的细节,我同意。我后来添加了它以了解更多细节。
::csv::writematrix $m $chan ";"