2010-05-05 105 views
1

我正在處理「大」測量數據,大約30K鍵值 對。測量有多次迭代。每次迭代後,將創建一個帶有30K kay值對的 數據文件(非csv)。我想以某種方式 克雷婭察形式的csv文件:向Tcl中的csv數據文件添加新的「列」

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

現在,我想知道如何添加每個迭代測寬 數據作爲列在Tcl的CSV文件的有效途徑。因此,無論哪種情況,I 似乎都需要將整個csv文件加載到某個變量(數組/列表)中,並通過添加新的測量數據來處理每個元素。這似乎有點低效。 有沒有另一種方法,也許?

回答

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很好地協作,並且很好地處理了這種任務。

+0

我是從tcllib的CVS包進行測試,並嘗試使用隊列和一個包含所有數據的數組。這個struct :: matrix方法似乎更清晰。會試試看!謝謝! – George 2010-05-05 12:37:04

相關問題