【发布时间】: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 列,因为它包含空格(据我了解)