2013-01-24 107 views
1

考慮到本文件:FileHelpers報價問題

"firstName"",lastName 
fn1,ln1 
fn2 
fn3,ln3 
fn4,ln4 

是否有可能忽略所有的報價? 這是我的代碼:

[DelimitedRecord(",")] 
    public partial class Person 
    { 
     //[FieldQuoted] 
     private string firstName; 

     [FieldNullValue("default first name")] 
     //[FieldQuoted] 
     private string lastName; 

     [FieldNotInFile] 
     private string city; 

     public string FirstName 
     { 
      get { return firstName; } 
      set { firstName = value; } 
     } 

     public string LastName 
     { 
      get { return lastName; } 
      set { lastName = value; } 
     } 

     public string City 
     { 
      get { return city; } 
      set { city = value; } 
     } 
    } 

      ExcelStorage provider = new ExcelStorage(typeof(Person)); 
      provider.FileName = "data.csv"; 
      System.Data.DataTable datTable = provider.ExtractRecordsAsDT(); 

數據表將只包含1列具有以下值:

{object[2]} 
    [0]: "firstName\",lastName\r\nfn1,ln1\r\nfn2\r\nfn3,ln3\r\nfn4,ln4\r\n" 
    [1]: "default first name" 

我真的不明白那是什麼FieldQuoted屬性,有或沒有它,我有相同的結果,無論身在何處,我把報價文件中

編輯: 如果我使用

「名字」,lastNam Ë FN1,LN1 FN2 FN3,LN3 FN4,LN 4

它忽略了報價,這是確定

,但如果我使用

""firstName"",""lastName"" 
fn1,ln1 
fn2 
fn3,ln3 
fn4,ln4 

我得到這個結果的第一行

[0]: "firstName\"\"" 
[1]: "lastName\"\"" 

回答

1

輸入的數據無效。至少,關於報價。 CSV中的字段只能包含嵌入式報價("")和報價中,,它們也可以包含嵌入換行符。

而這正是你在這裏看到的。 firstName後面的兩個引號是嵌入式引用,因爲您從不用另一個引號關閉帶引號的字段,因此將整個文件解析爲好像它是單個字段。

+0

我能以某種方式忽略文件中的所有引號嗎? – gigi

2

嘗試使用FieldQuoted屬性。

[FieldQuoted('"', QuoteMode.AlwaysQuoted, MultilineMode.NotAllow)] 

您可能需要試驗設置described here