当双引号在字段内时,csvhelper import忽略分隔符

时间:2018-05-25 20:52:41

标签: csvhelper

我正在使用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中更改文本限定符的选项,是否可能?

1 个答案:

答案 0 :(得分:1)

源CSV已被错误地转义。

表示英寸的双引号应该使用另一个双引号字符进行转义(请参阅RFC4180 Section 2第7项)。

... "1","*SPECIAL* Tire 10""","front black & red fill img***" ...

要使用^作为文本限定符而不是"来阅读CSV,您可以在CsvHelper Configuration中设置Quote属性:

csv.Configuration.Quote = '^';

这可以帮助您避免此特定文件的问题,但是当您遇到包含^的文本字段时,您可能会遇到问题。