2013-07-18 90 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更容易扩展并且更快。