C# 根据字段值分隔分析csv记录
我正在使用csvhelper读取csv文件记录,但我注意到有时csv字段值用空格(\t)分隔,有时 字段值用逗号分隔 现在我有6列,但由于字段值由空格分隔,我得到的所有记录都在一列中。因此,在为第二个字段获取列值时,我得到一个错误:索引“1”处的字段不存在。 因此,我在读取记录时遇到错误: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
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不是任何一种标准,只是一种松散定义的格式。例如,大多数欧洲国家使用
作为分隔符,因为,
是的十进制分隔符或可能的重复项