2013-01-24 71 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