2013-08-30 81 views
2

我正在使用FileHelper 2.0來解析我的csv數據。是否有任何選項filehelper可以正確處理轉義的分隔符?它可以將字段標識爲數據而不是分隔符。FileHelper轉義分隔符

我們的CSV格式: 逃逸逗號(,)與\,

實施例的數據:

名,姓氏

尼科\,LE,opeka

電流代碼:

[DelimitedRecord(",")] 
public class contactTemplate 
{ 
    public string firstName; 
    public string lastName; 
} 

如何獲得firstName = nico,le和lastName = opeka。 FileHelpers分裂逗號,而現在它返回:

的firstName - >尼科\

的lastName - >樂,opeka

回答

3

首先,你需要讓所有的領域可選引述。

[DelimitedRecord(",")] 
public class contactTemplate 
{ 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string firstName; 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string lastName; 
} 

然後,您需要引用所有包含轉義字符的字段。對此,您可以使用BeforeReadRecord事件。

FileHelperEngine engine = new FileHelperEngine(typeof(contactTemplate)); 
engine.BeforeReadRecord += BeforeEvent; 

private void BeforeEvent(EngineBase engine, BeforeReadRecordEventArgs e) 
{ 
    if (e.RecordLine.Contains("\")) 
    { 
     string[] parts = SplitStringRespectingEscapeCharacter(eRecordLine); 
     parts = QuoteAnyPartsWhichContainEscapeCharacter(parts); 
     parts = RemoveAnyEscapeCharacters(parts); 
     e.RecordLine = parts.Join; 
    } 
} 

你可以找到一些代碼,讓你開始你的自定義拆分功能here

+0

我想有一個函數SplitStringResepctingEscapeCharacter(eRecordLine) - > SplitStringRespectingEscapeCharacter(eRecordLine)的拼寫錯誤。如果輸入的字符串是這樣的:ni「co \,le,opeka after function QuoteAnyPartsWhichContainEscapeCharacter部分看起來像這樣:part0 - >」ni「co \,le」part1 - > opeka並且我們再次出現轉義字符的問題「 – broadband

+0

在引用函數中,你可以對現有的字符串做任何你喜歡的事情。如果你需要用現有的其他字符替換現有的字符,只需添加另一個步驟即可。或者,在「FieldQuoted」屬性中使用不明確的引號字符。 – shamp00

+0

或者在BeforeEvent方法中填寫contactTemplate。 r [index] .firstName = part1,r [index] .lastName = part2。我還找到了一種用''包圍零件的方法,如果零件包含'我們用\'轉義它,並且爲了分隔記錄我們使用字符串','而不是字符',問題就解決了。在任何情況下,文本都必須在FileHelper可以使用前處理/準備。因爲它似乎FileHelper沒有轉義分隔符支持。感謝您使用BeforeReadRecord。 – broadband

相關問題