0

我的问题是关于 C# 中的 CSV 文件。如果字段包含逗号,如何将其作为一个字段导出到 CSV 文件中?请参阅Field 2下面的示例:

字段 1|字段 2|字段 3

10.20|Doe,John|1 号框

我有这个代码:

//Get indices
indices = DenormalizeIndices(id);
foreach (DataRow row in indices.Tables[0].Rows)
{
 line = null;
  //We're only going to use selected fields
 for (i = 0; i < 3; i++)
 {
  if (line != null)
    line += DELIMITER;
  //Figure out the mapped field name we have defined
  if (i >= INDICES_TO_INCLUDE.Length)
    line += ""; //Nothing to populate
  else
  if (String.IsNullOrEmpty(INDICES_TO_INCLUDE[i]))
    line += "";
  else
    line += "=\"" + row[INDICES_TO_INCLUDE[i]].ToString() + "\"";

但是使用上面的这段代码,CSV 文件结果将如下所示,它将分隔索引值Field2

字段1 | 字段2 | 字段3 | 字段4

10.20 | 能源部 | 约翰 | 1号箱

我还应该在代码中添加什么,以便结果如下所示Field2

字段2

能源部,约翰

4

3 回答 3

3

包含文本的 CSV 文件应将文本字段用双引号括起来

1,2,"Hello world", "Dear, John"

至于这与您的代码有何关系,我不知道。您的line计算与 CSV 无关。

于 2013-10-07T20:07:47.390 回答
1

查看此文档:

RFC 4180 - 逗号分隔值 (CSV) 文件的通用格式和 MIME 类型

RFC(评论请求)不是标准,但这与大多数应用程序遵循的 CSV 标准一样接近。

基本规则是,如果您的值包含逗号、换行符或双引号,则用双引号将其括起来。值中的双引号被转义为两个双引号。

于 2013-10-07T21:04:29.263 回答
0

如果您真的希望每个项目都以 = 开头,则它应该在引号内,而不是在引号外。所以 line += "\"=" + row[INDICES_TO_INCLUDE[i]].ToString() + "\"";

制作内容,例如 "=10.20", "=Doe,John","=Box No 1"

这应该会产生正确引用的 CSV。

尽管您也可能只是想摆脱 =,但我不确定为什么它首先存在。

于 2013-10-07T20:50:43.200 回答