【问题标题】:How to write a value which contain comma to a CSV file in c#?如何在 C# 中将包含逗号的值写入 CSV 文件?
【发布时间】:2011-12-26 19:21:19
【问题描述】:

我正在使用数据表来存储数据。

我正在将数据表中的数据导出到 CSV 文件。

有时可能存在包含逗号的值(,),因此无法正确导出值。

举例

考虑值为"9,11,32"。我必须这样导出。

但是当我做第一列 conatins 9 然后在下一列 11

我想在 CSV 文件的同一列中显示 9,11,32。我该怎么做?

【问题讨论】:

  • “**未正确导出”是什么意思。意思是?通常,您将数据放在引号中,但这取决于读取文件的内容,而不是写入文件的内容。我总是建议您使用制表符分隔,然后您不必担心逗号。

标签: c# export-to-csv


【解决方案1】:

只需将您的数据放在反斜杠中,如下所示:“\”” + yourdata + “\””。看看下面的例子:

StringWriter csv = new StringWriter();
// Generate header of the CSV file
csv.WriteLine(string.Format("{0},{1}", "Header 1", "Header 2"));
// Generate content of the CSV file
foreach (var item in YourListData)
{
    csv.WriteLine(string.Format("{0},{1}", item.Data1, "\"" + item.Data2 + "\""));
}

return File(new System.Text.UTF8Encoding().GetBytes(csv.ToString()), "application/csv", string.Format("{0}{1}", "YourFileName", ".csv"));

在示例中:您的 data2 可能包含逗号“,”

【讨论】:

  • 但是如果我的数据类似于 abc,def" 那么它就不能像你解释的那样工作。它给出一列带有 abc,def" 和第二列带有值 def""。不知道怎么处理。
  • 您必须将数据中的一个“替换为两个”。
【解决方案2】:
  1. 带有embedded commas 的字段必须用双引号字符分隔。

    字段:

    1. abc, xyz
    2. pqr

csv 版本:

"abc, xyz" , pqr
  1. 包含double quote 字符的字段必须用双引号括起来,并且嵌入的双引号必须分别由一对连续的双引号表示。

    字段:

    Welcome to "My World"
    

    csv 版本:

    "Welcome to ""My World"""
    

【讨论】:

    【解决方案3】:

    如果您需要在 csv 中放入数据中的逗号,https://www.rfc-editor.org/rfc/rfc4180 表示将引号用作:

    "123,56","A dog, cat and a frog"
    

    【讨论】:

      【解决方案4】:

      在没有空格的双引号之间写入逗号分隔值以创建带有逗号分隔值的单列的 csv。

      例如。我有两列 CodeDescriptionCode01Val1,Val2,Val3。要使用给定数据创建 csv,请在记事本中写入以下行并使用 csv 扩展名保存。

      Code,Description
      Code01,"Val1,Val2,Val3"
      

      【讨论】:

        【解决方案5】:
        StringBuilder sb = new StringBuilder();          
                foreach (DataColumn col in dt.Columns)
                {
                    if (col.ColumnName.Contains(","))
                    {
                        sb.Append(String.Format("\"{0}\",", col.ColumnName));
                    }
                    else
                    {
                        sb.Append(String.Format("{0},", col.ColumnName));
                    }
                }
        

        【讨论】:

          【解决方案6】:

          将值放在双引号中。

          string ValueToEscape = "a,b";
          
          "\"" + ValueToEscape + "\""
          

          CSV 输出 = a,b

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-02-08
            • 1970-01-01
            • 2016-12-14
            • 1970-01-01
            • 1970-01-01
            • 2012-03-22
            • 2018-03-20
            相关资源
            最近更新 更多