Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据字段值分隔分析csv记录_C#_.net_Csvhelper - Fatal编程技术网

C# 根据字段值分隔分析csv记录

C# 根据字段值分隔分析csv记录,c#,.net,csvhelper,C#,.net,Csvhelper,我正在使用csvhelper读取csv文件记录,但我注意到有时csv字段值用空格(\t)分隔,有时 字段值用逗号分隔 现在我有6列,但由于字段值由空格分隔,我得到的所有记录都在一列中。因此,在为第二个字段获取列值时,我得到一个错误:索引“1”处的字段不存在。 因此,我在读取记录时遇到错误: DataTable dt = new DataTable(); CsvReader reader = new CsvReader(sr); reader.Configuration.HasHeaderRec

我正在使用csvhelper读取csv文件记录,但我注意到有时csv字段值用空格(\t)分隔,有时 字段值用逗号分隔

现在我有6列,但由于字段值由空格分隔,我得到的所有记录都在一列中。因此,在为第二个字段获取列值时,我得到一个错误:索引“1”处的字段不存在。

因此,我在读取记录时遇到错误:

DataTable dt = new DataTable();

CsvReader reader = new CsvReader(sr);
reader.Configuration.HasHeaderRecord = true;
reader.Configuration.IgnoreHeaderWhiteSpace = true;
reader.ReadHeader();
var headers = reader.Parser.RawRecord.Split(new[] { ',', '\t' },
    StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).
Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); //6 columns


foreach (var header in headers) {
    DataColumn col = new DataColumn();
    col.ColumnName = header;
    dt.Columns.Add(col);
}
reader.Read();

do {
    DataRow drRow = dt.NewRow();
    for (int iThColumn = 0; iThColumn < headers.Count(); iThColumn++) {
        var data =  reader.GetField<string>(iThColumn);

        if (string.IsNullOrEmpty(data))
            drRow[iThColumn] = null;
        else
            drRow[iThColumn] = reader.GetField<string>(iThColumn);

    }
    dt.Rows.Add(drRow);

} while (reader.Read()); 
DataTable dt=newdatatable();
CsvReader reader=新的CsvReader(sr);
reader.Configuration.HasHeaderRecord=true;
reader.Configuration.IgnoreHeaderWhiteSpace=true;
reader.ReadHeader();
var headers=reader.Parser.RawRecord.Split(新[]{',','\t'},
StringSplitOptions.RemoveEmptyEntries)。选择(x=>x.Trim()。
其中(x=>!string.IsNullOrWhiteSpace(x)).ToArray()//6列
foreach(标头中的var标头){
DataColumn col=新的DataColumn();
col.ColumnName=标题;
dt.列。添加(列);
}
reader.Read();
做{
DataRow drRow=dt.NewRow();
对于(int-iThColumn=0;iThColumn

如何解决此问题?

我建议从调试开始,在尝试通过逗号拆分之前,先用逗号替换所有选项卡实例。由于迂腐,CSV(逗号分隔值)文件不能将选项卡作为分隔符。您的意思是在同一文件中混合使用分隔符吗?那么您可能有一个损坏的CSV文件。否则,您可以提供所需的列、行分隔符CsvReader@Phylogenesis同样,CSV不是任何一种标准,只是一种松散定义的格式。例如,大多数欧洲国家使用
作为分隔符,因为
是的十进制分隔符或可能的重复项