FileHelpers报价问题

时间:2013-01-24 12:34:31

标签: c# csv 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(); 

DataTable只包含1行,其中包含以下值:

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

我真的不明白FieldQuoted属性是什么,无论有没有它我都有相同的结果,无论我在文件中放置引号

编辑: 如果我使用

“名字”,姓氏 FN1,LN1 FN2 FN3,LN3 FN4,LN4

它会忽略引号,这是好的

但如果我使用

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

我得到第一行的结果

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

2 个答案:

答案 0 :(得分:2)

尝试使用FieldQuoted属性。

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

您可能需要尝试设置described here

答案 1 :(得分:1)

您的输入数据无效。至少,关于报价。 CSV中的字段只有在加倍("")时才能包含嵌入式引号,并且在引号中它们也可以包含嵌入的换行符。

这正是你在这里看到的。 firstName后面的两个引号是嵌入式引号,因为您永远不会使用另一个引号关闭带引号的字段,所以整个文件都会被解析,就好像它是一个字段一样。