C# 使用C编写CSV文件#

C# 使用C编写CSV文件#,c#,.net,string,file,csv,C#,.net,String,File,Csv,我正在寻找一种在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";

我正在寻找一种在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 ?
    }

这里我需要在第一个单元格中写“a”,在第二个单元格中写“b”,c..

CSV是一种非常简单的文件格式,特别是当您不需要任何单元格来包含嵌套逗号时。CSV表示逗号分隔的值,所以您只需要一种在每个单元格之间用逗号构造字符串的方法。这将起作用,尽管它仅适用于一条线路:

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

如果只有4个值和一行?(我想情况并非如此?)


如果数据基于某种类型的收集,请提供更多信息。

CSV绝对不是一种简单的文件格式,它是一种足够复杂的格式,能够包含几乎任何类型的数据,而不管其形状或大小

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

您不应该手工处理CSV文件,您应该利用它来处理CSV文件


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

-1对于String.Join,这将被任何包含换行符或保留字符的参数彻底破坏。@Chris-是的,这不考虑任何引用、逗号、,等等。但是一个简单的解决方案可能是绝对初学者最容易使用的。@Justin simple在这种情况下是错误的,特别是在初学者的情况下。将此作为一种解决方案,一旦您遇到带有这些字符的数据,您将开始执行复杂的字符串操作,以尝试“修复”该问题,该问题非常脆弱,可能会重复多次。正确的方法是使用一个尊重所有这些的库,这是一个配置练习,而不是算法。+1我不同意@Chris的观点-对手头的问题使用最简单的解决方案,尽管边界条件应该是明确的(对于更高级的场景,参考FileHelper当然没有坏处)@jeroenh我绝对相信KISS和YAGNI,但简单和做作之间有区别,此示例是做作的而非简单。-1任何包含换行符或保留字符的参数都会破坏这一点。是的,这不是一个通用的解决方案,绝对不是编写CSV文件的最佳解决方案。但是,在许多情况下,以这种(或类似)方式构造CSV(或任何分隔的)文件是完全可以接受的,因为传入数据的格式是预期的或已清理的。我的解决方案(以及Justin的)适用于问题中的示例。CSV的问题是没有固定的格式(依赖于区域性),一些应用程序使用自己的实现。然而,每个实现都相对简单。有关详细信息,请参阅。是否可以使用Excel文件?@dotNET yes Excel在打开CSV文件时正确支持所有这些功能,但是Excel在创建CSV文件方面非常糟糕。如果我手工创建一个CSV文件,我会使用open office calc(他们的excel),否则我会使用FileHelpers生成它们,excel可以毫无问题地使用它们。您是否有解决此问题的方法,因为我将CSV、xlsx、xls进行了树化处理,但我得到的结果是相同的所有字符串都添加到第一个单元格中@dotNET我完全可以告诉你,用excel中正确打开的FileHelpers生成CSV文件(我在生产中使用FileHelpers),如果你编辑你的问题并发布你试图与FileHelpers交互的代码,我会很高兴指出我看到的任何错误。
string csv = string.Format("{0},{1},{2},{3}\n", a,b,c,d);
File.WriteAllText(filePath, csv);