我目前正在使用FileHelpers库(v2.0.0.0)来解析CSV文件。 CSV文件映射到具有少量公共属性的类,假设有 N 。问题是,默认情况下,FileHelpers似乎无法正确处理用户指定CSV文件超过 N-1 逗号的情况。其余的逗号只会附加到最后一个属性值。
我认为这必须可以通过FileHelpers' attributes进行配置,但我没有看到任何会忽略在记录中没有匹配属性的字段的内容。
我查看了RecordCondition,但使用像ExcludeIfEnds(",")之类的内容看起来如果它以逗号结尾会完全跳过该行,但我只想要它们剥离
可能我唯一的办法是预处理文件并删除任何尾随的逗号,这是完全没法的,但我想知道FileHelpers是否也能做到这一点,也许我只是没有在文档中看到它。
答案 0 :(得分:4)
只是一个黑客/解决方法的想法:您可以创建一个名为“ExtraCommas”的属性并将其添加到您的类中,以便在那里序列化额外的逗号而不是对象的真实属性......
答案 1 :(得分:0)
如果逗号的数量不同,我认为你运气不好,必须进行后期处理。但是,如果有固定金额,您可以在班级中设置空白字段。
[FieldOrder(5)]
public string Blank1;
[FieldOrder(6)]
public string Blank2;
这并不是真的咬我,因为我不使用FileHelpers类作为业务类,我将它用作构建业务类的对象。我存储它用于审计。我想有一次我玩弄Blanks私人的领域,不知道结果如何。
答案 2 :(得分: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();
}