解析高级CSV文件

时间:2011-03-25 10:36:29

标签: c# parsing c#-4.0 csv text-parsing

我必须加载以下CSV文件

head1, head2, head3, head4; head5
34 23; 2; "abc";"abc \"sdjh";8
34 23; 2; "abc";"abc 
sdj\;h
jshd";8
34 23; 2; "abc";"abc";8

该函数必须处理转义字符,例如\" \; \n\r以及字符串中的换行符。 有没有好的图书馆来解决这个问题?

3 个答案:

答案 0 :(得分:3)

我使用CSV阅读器为.Net做了很好的结果:http://www.codeproject.com/KB/database/CsvReader.aspx

答案 1 :(得分:1)

这不是有效的CSV文件...

标题行将被解释为

"head1"," head2"," head3"," head4; head5"

每隔一行只有一列。

我认为任何图书馆都无法开箱即用。看起来标题行有多个分隔符,所有其他行也可能有多个分隔符。如果您还提供了实际列的内容,则可以更轻松地提供帮助。

您可以试试CsvHelper(我维护的图书馆)。它非常灵活。您可以更改标题和行的配置,并使它们不同。您可以设置分隔符和引用字段的内容。它还处理\ r,\ n和\ r \ n的行结尾,即使每一行使用不同的行结尾。

答案 2 :(得分:0)

我无法通过我的所有测试来解析CSV分析,所以我最终写了一些简单的东西。 AnotherCsvParser

它可以完成我需要的一切......但也应该很容易分叉并扩展到您的需求。

假设:

 public class ABCD
 {
     public string A;
     public string B;
     public string C;
     public string D;
 }

它假设列按照字段定义的顺序..(但很容易扩展以读取属性或其他内容)

这有效:

    var output = NigelThorne.CSVParser.ReadCSVAs<ABCD>(
"a,\"b\",c,d\n1,2,3,4\n\"something, with a comma\",\"something \\\"in\\\" quotes\",\" a \\\\ slash \",\n,,\"\n\",");

这样:

  Assert.AreEqual(4, output.ToArray().Length);
  var row1 = output.ToArray()[0];
  Assert.AreEqual("a", row1.A);
  Assert.AreEqual("b", row1.B);
  Assert.AreEqual("c", row1.C);
  Assert.AreEqual("d", row1.D);

注意:对于大量数据来说,它可能不是很快..再次对我来说不是问题。