导出为 CSV - 如何写入包含逗号的值? C#
Export to CSV - How to write values which contain commas? c#
我目前有一个用于导出到 csv 文件的字符串生成器。在 CSV 文件中导出的值在 somw 值中包含逗号。
有时数据中包含“,”,导致生成错误。
public string ExportActionMapAsCsv()
{
StringBuilder builder = new StringBuilder(",");
List<EggEmbryoActivity> actions = GetActions();
List<EggStatusActionMap> actionMaps = GetActionMaps();
builder.AppendLine(string.Join(",", actions.Select(x => x.Title)));
foreach (EggStatusActionMap actionMap in actionMaps)
{
builder.Append(actionMap.StatusDescription);
builder.Append(",");
builder.AppendLine(string.Join(",", actionMap.ActionMaskAsBinary.PadLeft(actions.Count, '0').ToCharArray()));
}
return builder.ToString();
}
这是生成导出,但我如何在单列中显示带逗号的数据
您需要为要放置逗号的字符串添加引号
foreach (EggStatusActionMap actionMap in actionMaps)
{
builder.Append("\"" + neutralizeInput(actionMap.StatusDescription) + "\"");
builder.Append(",");
builder.AppendLine("\"" + neutralizeInput(string.Join(",", actionMap.ActionMaskAsBinary.PadLeft(actions.Count, '0').ToCharArray())) + "\"");
}
private string neutralizeInput(string input){
return input.replace("\"", "\"\"")
}
我非常倾向于创建一个扩展方法,将字符串转换为有效的 CSV 字段。
如果字段包含逗号或包含 double-quote,则必须将其括在 double-quote 中,并且任何 double-quote 都必须在字符串中重复。
扩展方法如下:
public static class Ex
{
public static string ToCsvSafeField(this string field) =>
(field.Contains(',') || field.Contains('"'))
? $"\"{field.Replace("\"", "\"\"")}\""
: field;
}
然后我会像这样重写代码:
foreach (EggStatusActionMap actionMap in actionMaps)
{
var items =
actionMap
.ActionMaskAsBinary
.PadLeft(actions.Count, '0')
.ToCharArray()
.Select(x => x.ToString().ToCsvSafeField())
.StartWith(actionMap.StatusDescription.ToCsvSafeField());
builder.AppendLine(string.Join(",", items));
}
我目前有一个用于导出到 csv 文件的字符串生成器。在 CSV 文件中导出的值在 somw 值中包含逗号。
有时数据中包含“,”,导致生成错误。
public string ExportActionMapAsCsv()
{
StringBuilder builder = new StringBuilder(",");
List<EggEmbryoActivity> actions = GetActions();
List<EggStatusActionMap> actionMaps = GetActionMaps();
builder.AppendLine(string.Join(",", actions.Select(x => x.Title)));
foreach (EggStatusActionMap actionMap in actionMaps)
{
builder.Append(actionMap.StatusDescription);
builder.Append(",");
builder.AppendLine(string.Join(",", actionMap.ActionMaskAsBinary.PadLeft(actions.Count, '0').ToCharArray()));
}
return builder.ToString();
}
这是生成导出,但我如何在单列中显示带逗号的数据
您需要为要放置逗号的字符串添加引号
foreach (EggStatusActionMap actionMap in actionMaps)
{
builder.Append("\"" + neutralizeInput(actionMap.StatusDescription) + "\"");
builder.Append(",");
builder.AppendLine("\"" + neutralizeInput(string.Join(",", actionMap.ActionMaskAsBinary.PadLeft(actions.Count, '0').ToCharArray())) + "\"");
}
private string neutralizeInput(string input){
return input.replace("\"", "\"\"")
}
我非常倾向于创建一个扩展方法,将字符串转换为有效的 CSV 字段。
如果字段包含逗号或包含 double-quote,则必须将其括在 double-quote 中,并且任何 double-quote 都必须在字符串中重复。
扩展方法如下:
public static class Ex
{
public static string ToCsvSafeField(this string field) =>
(field.Contains(',') || field.Contains('"'))
? $"\"{field.Replace("\"", "\"\"")}\""
: field;
}
然后我会像这样重写代码:
foreach (EggStatusActionMap actionMap in actionMaps)
{
var items =
actionMap
.ActionMaskAsBinary
.PadLeft(actions.Count, '0')
.ToCharArray()
.Select(x => x.ToString().ToCsvSafeField())
.StartWith(actionMap.StatusDescription.ToCsvSafeField());
builder.AppendLine(string.Join(",", items));
}