从TCL向excel文件添加新列

时间:2012-03-01 01:09:47

标签: tcl

我正在尝试使用set fid [open temp.csv a]'a'append命令从TCL脚本向CSV文件写入一些数据。我看到所有数据都从下一行追加。但我希望将我的新数据集添加到下一列。我该怎么办?

set fid [open temp.csv a]
foreach line $data {
    if { [regexp "SUM" $line == 1] } {
        incr line_counter
        if { [expr {$line_counter % 2}] == 0}  {
            if {[regexp {(MBytes) +([0-9\.]*)} $line match pre tput]==1 } {
                puts $fid " $line_counter Throughput:  $tput Mbps"
            }
        }
    }
}
close $fid

set fid [open temp.csv r]
while {[gets $fid chars] >= 0} {
    puts $chars
}
close $fid

3 个答案:

答案 0 :(得分:2)

open命令中的“a”标志意味着“以附加模式打开文件”,即创建文件(如果该文件不存在),否则不丢弃其内容并只放置“流指针”到文件的末尾,以便下一次调用该文件描述符上的puts将数据附加到文件中。

因此,您的问题可能是您不明白一般文件操作命令永远不会解释文件 1 中的数据:它只是一个不透明的字节流;对数据的任何解释都必须在其他地方进行。这就是serialization and deserialization的概念出现的地方。

我认为您应该从csv package查看专门的tcllib


1 那么,文件流可以在一定程度上解释其文件的内容,以便更轻松地处理文本文件:您可以specify the behaviour of an opened file关于字符编码和换行符进行通道

答案 1 :(得分:2)

要将列添加到CSV文件,您必须将数据添加到该CSV文件的每一行(或至少包含您关注的数据的行)。这需要完全重写文件,因为您无法在一般文本文件中插入数据(CSV是其特化)而无需重写文件的所有后续行。追加模式肯定会出错。

尝试在Tcllib中使用CSV包。特别是read the CSV file到矩阵中,add a column到该矩阵,然后将矩阵序列化为CSV格式。

答案 2 :(得分:0)

TCL中已有一个CSV包,为什么要重新发明轮子呢? http://tcllib.sourceforge.net/doc/csv.html