2011-05-05 105 views
3

我正在寻找一种在CSV文件的不同单元格中编写字符串的方法。使用C#编写CSV文件

我使用这个程序,

private void button1_Click(object sender, EventArgs e) 
    { 
     string filePath = @"E:\test.csv"; 

     string a = "a"; 
     string b = "c"; 
     string c = "d"; 
     string d = "d"; 

     File.WriteAllText(filePath, a); 
     // how can add the other strings in the next cells ? 
    } 

我需要在这里是写在第二单元“一”中的第一个单元格,“B”,C ..

回答

3

CSV绝对不是一个简单的文件格式,它是一个足够精细的格式,能够涵盖几乎任何类型的数据,无论形状或大小。

CSV格式能够处理可选参数与非可选参数,有或没有换行符的数据,并且应该能够在没有换行符的任何字段中使用或不使用字段转义字符,并且需要字段转义带有换行符的字段中的字符。

你不应该用手工处理CSV文件,你应该使用FileHelpers来处理CSV文件。

此时我不再使用FileHelpers作为我的goto CSV解析库,我使用Josh Close中的CsvHelper

+2

CSV的问题在于没有固定的格式(依赖于文化),有些应用程序使用它们自己的实现。然而,每个实施都相对简单。有关更多信息,请参阅http://en.wikipedia.org/wiki/Comma-separated_values。 – 2011-05-05 18:27:39

+0

是否可以使用Excel文件? – 2011-05-05 18:31:42

+0

我用.xls尝试过,但结果相同吗? – 2011-05-05 18:33:32

10

CSV是一个非常简单的文件格式,特别是如果你不需要任何单元格来包含嵌套逗号。 CSV意味着逗号分隔值,所以您只需要一种方法在每个单元格之间用逗号构造一个字符串。这将工作,但它只适用于单行:

File.WriteAllText(filePath, String.Join(",", a, b, c, d)); 
+0

+1对于'String.Join()' – CodingWithSpike 2011-05-05 18:24:23

+1

-1对于String.Join,这将被包含换行符或保留字符的任何参数完全破坏。 – 2011-05-05 18:26:07

+0

@Chris - 是的,这并没有考虑引用,逗号等任何细节。但一个简单的解决方案可能是绝对的初学者最容易使用的。 – Justin 2011-05-05 18:33:02

0

如果只有4个值和一行? (我认为是不是这种情况?)

string csv = string.Format("{0},{1},{2},{3}\n", a,b,c,d); 
File.WriteAllText(filePath, csv); 

如果数据是基于某种集合,给一些更多的信息。

+0

-1这将被任何包含换行符或保留字符的参数破坏。 – 2011-05-05 18:26:35

+0

是的,这不是一个通用的解决方案,绝对不打算成为编写CSV文件的全部解决方案。然而,在许多情况下,以这种(或类似的)方式构建一个CSV(或任何分隔的)文件是完全可以接受的,因为传入的数据处于预期的或清晰的格式。我的解决方案(以及贾斯汀的解决方案)将用于问题中的示例。 – Jon 2011-05-05 19:02:24