我正在使用CSVHelper将csv数据导入到表格中,我注意到以下字符串会破坏我的导入,最终我的数据在第四个字段之后的所有字段上移位。我很确定它与10"我的数据中的(英寸符号):
"111111-B","EERRTT",1,"*SPECIAL* Tire 10"","front black & red fill img***",101.53,101.53,"20180427","","",""
这是我的配置:
var csv = new CsvReader(reader);
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<InvolineMap>();
csv.Configuration.MissingFieldFound = null;
csv.Configuration.BadDataFound = null;
这是我的地图:
public sealed class InvolineMap : ClassMap<Involine>
{
public InvolineMap()
{
Map(m => m.Id).Ignore();
Map(m => m.INVOICEREF).Index(0);
Map(m => m.CATNO).Index(1);
Map(m => m.QUAN).Index(2);
Map(m => m.DONE).Index(3);
Map(m => m.DTWO).Index(4);
Map(m => m.UNIT).Index(5);
Map(m => m.TOTAL).Index(6);
Map(m => m.DATE).Index(7);
Map(m => m.VOID).Index(8);
Map(m => m.COM1).Index(9);
Map(m => m.COM2).Index(10);
Map(m => m.OrderId).Ignore();
Map(m => m.Line).Ignore();
}
}
如何忽略英寸符号?
此外,我可以选择更换&#34; ^作为文本限定符的字符,但我没有看到在CSVHelper中更改文本限定符的选项,是否可能?
答案 0 :(得分:1)
源CSV已被错误地转义。
表示英寸的双引号应该使用另一个双引号字符进行转义(请参阅RFC4180 Section 2第7项)。
... "1","*SPECIAL* Tire 10""","front black & red fill img***" ...
要使用^
作为文本限定符而不是"
来阅读CSV,您可以在CsvHelper Configuration中设置Quote
属性:
csv.Configuration.Quote = '^';
这可以帮助您避免此特定文件的问题,但是当您遇到包含^
的文本字段时,您可能会遇到问题。