1

我需要读取多个 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 倍。

4

1 回答 1

1

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

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

与简单StreamReader的 .

于 2013-09-11T05:18:19.060 回答