2012-03-01 45 views
1

我试图用一个附加命令set fid [open temp.csv a]'a'将一些数据写入TCL脚本的CSV文件。我看到所有数据都从下一行追加。但我希望将我的新数据集添加到下一列。我该怎么办这种情况?向TCL的excel文件添加新的柱子

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 

回答

2

“一”国旗在open命令的意思是“追加方式打开文件”,即创建该文件,如果不以其他方式存在,不放弃它的内容,只是定位“流指针”到该文件的末尾,以便对该文件描述符下一次调用puts将数据附加到该文件。

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

我认为你应该看看tcllib的专用csv package


嘛,文件流可以解释他们的文件的内容在一定程度上,使其更容易使用文本文件:可以specify the behaviour of an opened file通道关于字符编码和换行符。

0

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

+0

使用此示例代码包需要TCOM 集练成[:: TCOM :: REF CREATEOBJECT excel.application] 组工作簿[$ Excel工作簿] 组工作簿[$簿打开{C:\ TEST.XLS}] 设置工作表[$ excel工作表] 设置工作表[$工作表项目[表达式1]] 设置单元格[$工作表单元格] $单元格项目2 B“测试”$工作簿保存 $ excel退出 – amateur 2012-03-05 02:15:13

+0

- 尝试使用此示例代码用for循环代码将数据存储在特定列中的单元格中..遇到0x80020005 {未知错误}。任何人都可以帮助我如何使用此方法将一组数据写入特定列的单元格? – amateur 2012-03-05 02:15:24

2

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

尝试在Tcllib中使用CSV包。具体来说,将read the CSV file转换为该矩阵的矩阵,add a column,然后将该矩阵再次串行化为CSV。