2013-07-18 54 views
1

我需要讀取多個csv文件並將它們合併。合併數據用於生成圖表(使用.NET圖表控件)。閱讀具有不同標題/列的csv日誌文件

到目前爲止,我用一個簡單的StreamReader做到了這一點,並添加一切一個數據表:

while (sr.Peek() > -1) 
{ 
    strLine = sr.ReadLine(); 
    strLine = strLine.TrimEnd(';'); 
    strArray = strLine.Split(delimiter); 
    dataTableMergedData.Rows.Add(strArray); 
} 

但現在有問題,該日誌文件可以改變。正如你在這裏看到的,更新的日誌文件有更多的列:logfile schema

我目前的程序現在不起作用,我正在尋求建議如何做到這一點。性能很重要,因爲每個日誌文件都包含大約1500行和最多100列,並且日誌文件合併到一年期間(等於365個文件)。

我會這樣做:創建一個DataTable,它應該在最後包含所有數據,並將每個日誌文件讀入單獨的DataTable。在每次讀取操作後,我會將單獨的DataTable添加到「大」DataTable中,檢查列是否已更改,並添加新列(如果有)。

但是我擔心使用DataTable會影響性能。

注意:我正在用winforms做這件事,但我認爲這無關緊要。

編輯:試過CsvReader但這比我目前的解決方案慢大約4倍。

回答

1

測試小時,我做到了我的問題描述的方式後:

首先我創建了一個DataTable它應該包含在最終的全部數據。然後我通過foreach循環遍歷所有日誌文件,併爲每個日誌文件創建另一個日誌文件DataTable,並使用日誌文件中的csv-data填充它。該表被添加到第一個DataTable,無論它們是否有不同的列,它們都會被正確添加。

與簡單的StreamReader相比,這可能需要一些性能,但比LumenWorks CsvReader更容易擴展並且更快。