4

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

我认为这必须可以通过FileHelpers 的属性进行配置,但我没有看到任何会忽略记录中没有匹配属性的字段的内容。

我查看了RecordCondition s,但是使用 ExcludeIfEnds(",") 之类的东西,如果它以逗号结尾,它看起来会完全跳过该行,但我只是希望它们被剥离。

我唯一的办法可能是预处理文件并去除任何尾随逗号,这完全没问题,但我想知道 FileHelpers 是否也可以这样做,也许我只是在文档中没有看到它。

4

3 回答 3

4

只是一个黑客/解决方法的想法:您可以创建一个名为“ExtraCommas”的属性并将其添加到您的类中,以便额外的逗号在那里序列化,而不是在对象的真实属性中......

于 2012-07-06T13:14:39.997 回答
0

如果逗号的数量不同,我认为你不走运,必须进行后期处理。但是,如果有固定金额,您可以在班级中设置空白字段。

[FieldOrder(5)] 
public string Blank1;

[FieldOrder(6)]
public string Blank2;

这并没有真正咬我,因为我不使用 FileHelpers 类作为业务类,我将它用作构建业务类的对象。我存储它以供审核。我想有一次我尝试将 Blanks 的字段设为私有,但不知道结果如何。

于 2012-07-06T13:09:17.830 回答
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();

}
于 2015-10-22T08:59:06.620 回答