在Tcl中向csv数据文件添加新的“列”

时间:2010-05-05 12:12:05

标签: csv tcl

我正在处理“大”测量数据,大约30K键值 对。测量具有迭代次数。每次迭代后a 创建具有30K kay-value对的datafile(非csv)。我想以某种方式 creata形式的csv文件:

Key1,value of iteration1,value of iteration2,...
Key2,value of iteration1,value of iteration2,...
Key2,value of iteration1,value of iteration2,...
...

现在,我想知道添加每个迭代测量的有效方法 数据作为Tcl中csv文件的列。所以,在任何一种情况下,我似乎都是 将需要将整个csv文件加载到某个变量(数组/列表)并继续工作 每个元素通过添加新的测量数据。这似乎有点低效。 还有另一种方式吗?

1 个答案:

答案 0 :(得分:2)

由于CSV文件基本上是文本文件,因此您必须加载所有数据并再次将其写出。没有其他方法可以扩展列数,因为数据基本上是行主要的。做你想说的最简单的方法(毕竟,30k对不是 那么多)是使用csv package进行解析工作。这段代码可能会做你想要的......

package require csv
package require struct::matrix

# Load the file into a matrix
struct::matrix data
set f [open mydata.csv]
csv::read2matrix $f data , auto
close $f

# Add your data
set newResults {}
foreach key [data get column 0] {
    lappend newResults [computeFrom $key]; # This is your bit!
}
data add column $newResults

# Write back out again
set f [open mydata.csv w]
csv::writematrix data $f
close $f

虽然你可能会更好地使用数据库。 metakitsqlite3都可以很好地与Tcl配合使用,并且可以很好地处理这类任务。