【问题标题】:Read csv logfiles with different headers/columns读取具有不同标题/列的 csv 日志文件
【发布时间】:2013-07-18 09:23:06
【问题描述】:

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

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

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

但现在有一个问题,日志文件可以更改。正如您在此处看到的,较新的日志文件有额外的列:

我目前的程序现在不起作用,我正在寻求建议如何做到这一点。性能很重要,因为每个日志文件包含大约 1500 行和最多 100 列,并且日志文件最多合并一年(等于 365 个文件)。

我会这样做:创建一个 DataTable,它应该包含最后的所有数据,并将每个日志文件读入一个单独的 DataTable。每次读取操作后,我会将单独的 DataTable 添加到“大”DataTable 中,检查列是否已更改,如果更改则添加新列。

但我担心使用 DataTables 会影响性能。

注意:我正在使用 winforms 执行此操作,但我认为这并不重要。

编辑:尝试了CsvReader,但这比我目前的解决方案慢了大约 4 倍。

【问题讨论】:

    标签: c# winforms performance csv datatable


    【解决方案1】:

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

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

    与简单的StreamReader 相比,这可能会降低一些性能,但它比 LumenWorks CsvReader 更容易扩展并且速度更快。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2022-06-30
      • 2020-12-24
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多