2014-11-25 108 views
0

我在使用Lumenworks Fast CsvReader时遇到了一些问题。使用代码:当CSV文件使用双引号或者领域的侧格式化使用Fast CsvReader读取CSV文件时不带引号字段

using (CsvReader csv = new CsvReader(new StreamReader(Server.MapPath(fileName)), true)) 
{ 
    csv.ParseError += csv_ParseError; 

    while (csv.ReadNextRecord()) 
    { 
      var importItem = new ProductImportItem(csv); 
      if (!ProductsDALC.SearchByPartProductCode(importItem.ProductCode).Any()) 
      { 
       if (!SaveProduct(importItem)) 
       { 
        this.ParseErrors.Add(string.Format("Failed to add product-{0}", importItem.ProductCode)); 
       } 
      } 
    } 
} 

的代码工作正常/列的值,例如:

“PRODUCT_CODE”,“PRODUCT_NAME”,“ITEM_DESCRIPTION ”, “SKU”, “postage_level_required”, “cost_price”, “retail_price_inc_vat”

但是,如果列是这样的:

PRODUCT_CODE,PRODUCT_NAME,ITEM_DESCRIPTION,SKU,postage_level_required,cost_price,retail_price_inc_vat

然后代码行为就像没有数据,也就是说,它不会进入while环和枚举结果在调试器中设置将显示它不会产生任何结果。

如果我对输入/输出数据有绝对的控制权,这将会很好。但是,我所能做的就是为用户提供一个包含字段的模板,并希望它们将数据包装在引号中。这不是一个可接受的方法。

有没有办法让读者解析数据,即使它没有用引号包裹?

我知道内置于.Net中的TextFieldParser类可以处理这个问题,但由于我们在项目中的其他地方使用了CsvReader,所以保持一致会很好。

回答

1

您必须提供信息的字段在构造函数中使用unicode "null" character没有报价:

Char quotingCharacter = '\0'; // means none 
Char escapeCharacter = '\0'; 
Char commentCharacter = '\0'; 
Char delimiter = ','; 
bool hasHeader = true; 
using (var csv = new CsvReader(reader, hasHeader, delimiter, quotingCharacter, escapeCharacter, commentCharacter, ValueTrimmingOptions.All)) 
{ 
    // ... 
} 
+0

这完美的作品,谢谢。 – DGibbs 2014-11-25 10:27:47

相关问题