2012-07-06 228 views
2

我目前使用FileHelpers庫(v2.0.0.0)來解析CSV文件。 CSV文件被映射到一個擁有少數公共屬性的類,假設有N。問題在於,默認情況下,FileHelpers似乎無法正確處理用戶指定的CSV文件多於N-1逗號的情況。其餘的逗號只是附加到最後一個屬性值。使FileHelpers 2.0處理CSV文件時使用多餘的逗號

我想這一定是可以通過FileHelpers' attributes配置的,但是我沒有看到任何會忽略記錄中沒有匹配屬性的字段。

我查看了RecordCondition s,但使用諸如ExcludeIfEnds(「,」)之類的東西看起來像它會完全跳過這行,如果它以逗號結尾,但我只是希望它們被刪除。

這可能是我唯一的辦法是預先處理文件,並剝奪任何尾隨逗號,這是完全正常,但我想知道,如果FileHelpers能做到這一點爲好,也許我只是不在文檔中看到它。

回答

2

只是一個想法爲黑客/解決方法:你可以創建一個名爲「ExtraCommas」屬性,並將其添加到您的課,這樣額外的逗號是序列化存在,而不是在你的對象的不動產...

+0

我喜歡那樣,甚至沒有想過它。我會試一試。 – Dave 2012-07-06 14:23:17

+0

你應該遵循@Dave,但也要添加'[FieldOptional]'屬性。請參閱[documentation](http://www.filehelpers.com/FileHelpers.FieldOptionalAttribute.html)到您的額外字段。 – shamp00 2012-07-09 08:03:30

0

如果逗號的數量不同,我認爲你運氣不好,將不得不做後期處理。但是,如果有固定金額,則可以在班級中設置空白字段。

[FieldOrder(5)] 
public string Blank1; 

[FieldOrder(6)] 
public string Blank2; 

這並不是真的想知道咬我,因爲我不使用FileHelpers類作爲一個企業級的,我把它作爲一個對象從構建業務類。我存儲它進行審計。我認爲我一度在爲空白領域做出私人努力,但不知道結果如何。

+0

感謝您的建議。不幸的是,FileHelpers 2.0沒有這個屬性,這就是我使用的版本。我會更新我的OP。 – Dave 2012-07-06 13:11:15

+0

你不需要FieldOrder,我只是把它留在那裏,因爲它曾經是一個「最佳實踐」(我從不關心)。我的解決方案是計算逗號的數量,然後在名爲BlankN的末尾添加一個幻像字段BlankN + 1。 (不知道已經消失了,謝謝!) – 2012-07-06 13:14:29

0

這是您可以使用的自定義方法,它可能不是最佳解決方案,但它會解決最後一個逗號問題。代碼可以更好地進行優化,這只是爲了讓您瞭解如何解決這類問題。

int main(){ 
    StreamReader sr = new StreamReader(@"C:\Users\musab.shaheed\Desktop\csv.csv"); 
    var lineCount=File.ReadLines(@"C:\Users\musab.shaheed\Desktop\csv.csv").Count(); 
      for (int i = 0; i < lineCount;i++) { 

      String fileText = sr.ReadLine(); 

      fileText=fileText.Substring(0, fileText.Length - 1); 


      //store your data in here 
      Console.WriteLine(fileText); 


      }; 

      sr.Close(); 

}