2012-03-01 35 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。