2017-02-20 47 views
0

我StackOverflow上读到这里很多问题,试图找到一个解决一个简单的问题。我正在使用FileHelpers库导入CSV文件。该CSV文件的最后一列没有分隔符,当我试图导入我的错误当为FileHelpers导入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 

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

我如何处理这种情况,避免“FieldOptional”属性?

+0

它听起来像CSV有更多的记录比你预期的.... – BugFinder

+0

你显示你的csv的两条线是不一样的!第一行有6个字段,第二行只有4. –

+0

@ChrisDunaway这只是一个例子,表明我在行尾没有分隔符 – Phate01

回答

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; 
} 

这个类也可与上面的例子。

+0

我有版本2.9.9。我其实试图实现你的第二个解决方案,但我仍然得到了错误 – Phate01

+0

我测试了它,它的工作原理。我这边的问题是我们使用基于db表的动态引擎,但我认为这个问题与我们动态构建FileHelpersEngine无关。 – Phate01

+0

如果需要,您仍然可以动态添加额外的'FieldOptional'。 '字段= classBuilder.AddField( “虚拟” 的typeof(字符串));'然后'field.FieldOptional = TRUE;' – shamp00

相关问题