C# 读取具有不同标题/列的csv日志文件

C# 读取具有不同标题/列的csv日志文件,c#,winforms,performance,csv,datatable,C#,Winforms,Performance,Csv,Datatable,我需要读取多个csv文件并合并它们。合并数据用于生成图表(使用.NET图表控件) 到目前为止,我已经用一个简单的streamreader完成了这项工作,并将所有内容添加到一个DataTable中: while (sr.Peek() > -1) { strLine = sr.ReadLine(); strLine = strLine.TrimEnd(';'); strArray = strLine.Split(delimiter); dataTableMergedData.R

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

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

while (sr.Peek() > -1)
{
  strLine = sr.ReadLine();
  strLine = strLine.TrimEnd(';');
  strArray = strLine.Split(delimiter);
  dataTableMergedData.Rows.Add(strArray);
}
但是现在有一个问题,日志文件可以更改。如您在此处所见,较新的日志文件具有附加列:

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

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

但是我担心使用数据表会影响性能

注意:我是用winforms来做这件事的,但我认为这并不重要


编辑:尝试过,但这比我当前的解决方案慢4倍左右。

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

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


与简单的
StreamReader
相比,这可能需要一些性能,但它比LumenWorks CsvReader更易于扩展,速度更快。

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

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

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