读取具有不同标头/列的csv日志文件

时间:2013-07-18 09:23:07

标签: c# winforms performance csv datatable

我需要读取多个csv文件并合并它们。合并的数据用于生成图表(使用.NET图表控件)。

到目前为止,我已经使用简单的streamreader完成了这项工作,并将所有内容添加到一个DataTable中:

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 个答案:

答案 0 :(得分:1)

经过几个小时的测试后,我按照我在问题中描述的方式进行了测试:

首先,我创建了一个DataTable,其中应包含最后的所有数据。然后我通过foreach循环遍历所有日志文件,对于每个日志文件,我创建另一个DataTable并用日志文件中的csv-data填充它。此表会添加到第一个DataTable,无论它们是否有不同的列,都会正确添加。

与简单的StreamReader相比,这可能会带来一些性能,但它比LumenWorks CsvReader更容易扩展,但仍然更快。

相关问题