2014-01-15 25 views
0

我試圖從地獄解析CSV文件,使用美妙的FileHelpers庫。FileHelpers嵌套引號和逗號 - 解析錯誤

它無法處理表單的一行:

"TOYS R"" US"," INC.""",fld2,fld3,"<numberThousands>","<numberThousands>","<numberThousands>",fld7, 

FileHelper是在「千人」的格式處理多個字段(使用自定義格式)非常好,即使裹着報價尾隨逗號等,但是它會導致第一個領域的問題。

"TOYS R"" US"," INC.""",fld2,... 

此字段包含嵌套引號和嵌套逗號。 FileHelper不知道如何處理這個問題,並將其分成兩個單獨的字段,隨後導致引發異常。

有沒有建議的方法來處理這個問題?

回答

5

首先,您需要將所有字段選中引用。

[DelimitedRecord(",")] 
public class contactTemplate 
{ 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string CompanyName; 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string fld2; 
    // etc... 
} 

然後,你需要在BeforeReadRecord事件代替別的東西(例如,一個單引號)轉義符。

var engine = new FileHelperEngine<MyFileHelpersSpec>(); 

engine.BeforeReadRecord += (sender, args) => 
    args.RecordLine = args.RecordLine.Replace(@"""", "'"); 
+0

我想過這個,但不幸的是RecordLine沒有公開設置。我目前手動解析行(在BeforeReadRecord中)並將SkipThisRecord設置爲true。哈克,但它的作品。 – trilson86

+0

當然'RecordLine'是可以設置的。請參閱[此頁面底部]的註釋(http://filehelpers.sourceforge.net/events.html)。你正在使用哪個版本?你確定你沒有嘗試設置「記錄」? – shamp00

+0

沒有{set; }屬性的訪問器:http://filehelpers.sourceforge.net/FileHelpers.ReadRecordEventArgs.RecordLine.html – trilson86