在使用FileHelpers导入CSV文件时,为什么要将类模型的最后一列标记为可选项?

时间:2017-02-20 15:41:37

标签: c# csv filehelpers

我在StackOverflow上阅读了很多问题,试图找到一个简单问题的解决方案。我使用FileHelpers库导入CSV文件。 CSV文件在最后一列没有分隔符,当我尝试导入时,我得到错误

Line: 2 Column: 179. Delimiter ',' not found after field 'Active' (the record has less fields, the delimiter is wrong or the next field must be marked as optional)

没错,因为我的档案看起来像是

...,Clip Ons,,D02,8 Card Wallet,Y
...,D02,Bathurst Chain Crossbody,Y

我找到的一个解决方案是使用attribule FieldOptional标记最后一列。问题是该列不是可选的;如果最后一列为空,则必须抛出错误。

如何处理这种情况,避免' FieldOptional'属性?

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本?使用FileHelpers 3.1.5,这很好用:

[DelimitedRecord(",")]
[IgnoreEmptyLines]
public class MySpec
{
    public string Column1;
    public string Column2;
    public string Column3;
    public string Column4;
    public string Column5;
}

class Program
{
    static void Main(string[] args)
    {
        var fileHelpersEngine = new FileHelperEngine<MySpec>();
        var records = fileHelpersEngine.ReadString("Clip Ons,,D02,8 Card Wallet,Y");
        var firstRecord = records.First();
        Assert.AreEqual("Clip Ons", firstRecord.Column1);
        Assert.AreEqual(string.Empty, firstRecord.Column2);
        Assert.AreEqual("D02", firstRecord.Column3);
        Assert.AreEqual("8 Card Wallet", firstRecord.Column4);
        Assert.AreEqual("Y", firstRecord.Column5);
        Console.ReadKey();
    }
}

对于旧版本(如果我没记错,则为2.0),您需要再添加一个额外(虚拟)属性并将其标记为[FieldOptional]。这意味着:最后一个分隔符是可选的,我不关心最后一个分隔符后的任何内容

所以你的课程看起来像这样:

[DelimitedRecord(",")]
[IgnoreEmptyLines]
public class MySpec
{
    public string Column1;
    public string Column2;
    public string Column3;
    public string Column4;
    public string Column5;
    [FieldOptional]
    public string Dummy;
}

这个类也适用于上面的例子。