【问题标题】:Space in CSV file detected as commaCSV 文件中的空格检测为逗号
【发布时间】:2016-08-23 05:50:48
【问题描述】:

我尝试生成包含 4 列的 CSV 文件。 其中一列是名称,其中包含用空格分隔的名字和姓氏。

当我将此文本数据写入.csv 文件时,它会将空格检测为逗号并添加额外的列。示例:

Name - First LastName 转换为:

 Name | AdditionalColumn

First | LastName

但应该只是

          Name |
First LastName |

要生成文件,我使用下一个方法:

public string Export(bool includeHeaderLine = true)
    {
        var sb = new StringBuilder();
        //Get properties using reflection.
        IList<PropertyInfo> propertyInfos = typeof(T).GetProperties();

        if (includeHeaderLine)
        {
            //add header line.
            foreach (PropertyInfo propertyInfo in propertyInfos)
            {
                sb.Append(propertyInfo.Name).Append(",");
            }
            sb.Remove(sb.Length - 1, 1).AppendLine();
        }

        //add value for each property.
        foreach (T obj in _objects)
        {
            foreach (PropertyInfo propertyInfo in propertyInfos)
            {
                sb.Append(MakeValueCsvFriendly(propertyInfo.GetValue(obj, null))).Append(",");
            }
            sb.Remove(sb.Length - 1, 1).AppendLine();
        }

        return sb.ToString();
    }

【问题讨论】:

  • 必须引用包含分隔符的值。
  • PropertyInfo 类作为枚举返回列的名称并导致问题。无法通过发布的代码修复。
  • “检测”是什么意思?您的代码读取 CSV 文件,它只是将文本写入文件。任何意想不到的结果都是由代码或数据引起的。例如,您确定您的属性值不包含逗号或换行符吗?
  • 有一个很好的库来处理 CSV 文件。查看 CsvHelper 的 nuget 包。 nuget.org/packages/CsvHelper
  • @PanagiotisKanavos,在“检测”下,我的意思是当我打开 csv 文件时,我看到我的名称是 2 列,因为它包含空格(据我了解)

标签: c# string csv separator


【解决方案1】:

首先,如何检查创建的CSV? 如果你打开 Excel,首先尝试修改 MakeValueCsvFriendly(object value) 并用空格引用 value:

...    
if (output.Contains(",") || output.Contains("\"") || output.Contains(" "))
                output = '"' + output.Replace("\"", "\"\"") + '"';
...

如果您导出带有标题的 CSV,请在记事本中检查生成的 CSV,“名称”后是否有双逗号。

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2019-02-14
    • 1970-01-01
    • 2017-12-15
    • 2011-02-26
    相关资源
    最近更新 更多