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