【问题标题】:Writing in an CSV file using C#使用 C# 写入 CSV 文件
【发布时间】:2011-08-19 15:06:12
【问题描述】:

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

【问题讨论】:

    标签: c# .net string file csv


    【解决方案1】:

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

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

    您不应该手动处理 CSV 文件,您应该使用 FileHelpers 处理 CSV 文件。

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

    【讨论】:

    • CSV 的问题在于没有固定的格式(取决于文化),并且一些应用程序使用自己的实现。然而,每个实现都相对简单。请参阅en.wikipedia.org/wiki/Comma-separated_values 了解更多信息。
    • 是否可以使用 Excel 文件?
    • @dotNET 是的,当您打开 CSV 文件时,excel 正确支持所有这些功能,但是 excel 在创建 csv 文件时很糟糕。如果我手动创建一个 CSV 文件,我使用 open office calc(他们的 excel),否则我使用 FileHelpers 生成它们,它们可以被 excel 使用而不会出现问题。
    • 你有这个问题的解决方案吗,因为我使用 csv、xlsx、xls 但我得到相同的结果所有字符串都添加到第一个单元格中!!
    • @dotNET 我绝对可以看出,如果您编辑问题并发布您尝试与 FileHelpers 交互的代码,则使用 FileHelpers 在 excel 中正确打开生成 CSV 文件(我在生产中使用文件助手)很高兴指出我看到的任何错误。
    【解决方案2】:

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

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

    如果数据基于某种集合,请提供更多信息。

    【讨论】:

    • -1 这会被任何包含换行符或保留字符的参数破坏。
    • 是的,这不是通用解决方案,也绝对不是编写 CSV 文件的万能解决方案。然而,在许多情况下,以这种(或类似的)方式构建 CSV(或任何分隔的)文件是完全可以接受的,因为传入的数据是预期的或已清理的格式。我的解决方案(以及贾斯汀的)将适用于问题中的示例。
    【解决方案3】:

    CSV 是一种非常简单的文件格式,尤其是在您不需要任何单元格来包含嵌套逗号的情况下。 CSV 表示 逗号分隔值,因此您只需要一种在每个单元格之间用逗号构造字符串的方法。这将起作用,尽管它仅适用于单行:

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

    【讨论】:

    • -1 for String.Join,这将被任何包含换行符或保留字符的参数完全破坏。
    • @Chris - 是的,这没有考虑引用、逗号等的任何细节。但是一个简单的解决方案可能是绝对初学者最容易使用的。
    • @Justin simple 在这种情况下是错误的,尤其是在初学者的情况下。一旦遇到带有这些字符的数据,使用它作为解决方案,您将开始进行复杂的字符串操作以尝试“修复”非常脆弱并且可能重复多次的问题。正确的方法是使用尊重所有这些的库,并且是配置而不是算法的练习。
    • +1 我不同意@Chris - 使用最简单的解决方案来解决手头的问题,尽管边界条件应该很清楚(并且对于更高级的场景参考 FileHelpers 肯定不会受到伤害)
    • @jeroenh 我是 KISS 和 YAGNI 的绝对忠实信徒,但简单和做作之间是有区别的,这个样本做作不简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2012-08-25
    相关资源
    最近更新 更多