2012-07-06 55 views
2

我目前使用FileHelpers库(v2.0.0.0)来解析CSV文件。 CSV文件被映射到一个拥有少数公共属性的类,假设有N。问题在于,默认情况下,FileHelpers似乎无法正确处理用户指定的CSV文件多于N-1逗号的情况。其余的逗号只是附加到最后一个属性值。使FileHelpers 2.0处理CSV文件时使用多余的逗号

我想这一定是可以通过FileHelpers' attributes配置的,但是我没有看到任何会忽略记录中没有匹配属性的字段。

我查看了RecordCondition s,但使用诸如ExcludeIfEnds(“,”)之类的东西看起来像它会完全跳过这行,如果它以逗号结尾,但我只是希望它们被删除。

这可能是我唯一的办法是预先处理文件,并剥夺任何尾随逗号,这是完全正常,但我想知道,如果FileHelpers能做到这一点为好,也许我只是不在文档中看到它。

回答

2

只是一个想法为黑客/解决方法:你可以创建一个名为“ExtraCommas”属性,并将其添加到您的课,这样额外的逗号是序列化存在,而不是在你的对象的不动产...

+0

我喜欢那样,甚至没有想过它。我会试一试。 – Dave 2012-07-06 14:23:17

+0

你应该遵循@Dave,但也要添加'[FieldOptional]'属性。请参阅[documentation](http://www.filehelpers.com/FileHelpers.FieldOptionalAttribute.html)到您的额外字段。 – shamp00 2012-07-09 08:03:30

0

如果逗号的数量不同,我认为你运气不好,将不得不做后期处理。但是,如果有固定金额,则可以在班级中设置空白字段。

[FieldOrder(5)] 
public string Blank1; 

[FieldOrder(6)] 
public string Blank2; 

这并不是真的想知道咬我,因为我不使用FileHelpers类作为一个企业级的,我把它作为一个对象从构建业务类。我存储它进行审计。我认为我一度在为空白领域做出私人努力,但不知道结果如何。

+0

感谢您的建议。不幸的是,FileHelpers 2.0没有这个属性,这就是我使用的版本。我会更新我的OP。 – Dave 2012-07-06 13:11:15

+0

你不需要FieldOrder,我只是把它留在那里,因为它曾经是一个“最佳实践”(我从不关心)。我的解决方案是计算逗号的数量,然后在名为BlankN的末尾添加一个幻像字段BlankN + 1。 (不知道已经消失了,谢谢!) – 2012-07-06 13:14:29

0

这是您可以使用的自定义方法,它可能不是最佳解决方案,但它会解决最后一个逗号问题。代码可以更好地进行优化,这只是为了让您了解如何解决这类问题。

int main(){ 
    StreamReader sr = new StreamReader(@"C:\Users\musab.shaheed\Desktop\csv.csv"); 
    var lineCount=File.ReadLines(@"C:\Users\musab.shaheed\Desktop\csv.csv").Count(); 
      for (int i = 0; i < lineCount;i++) { 

      String fileText = sr.ReadLine(); 

      fileText=fileText.Substring(0, fileText.Length - 1); 


      //store your data in here 
      Console.WriteLine(fileText); 


      }; 

      sr.Close(); 

}