如何解决导出为CSV-如何编写包含逗号的值? 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();
}
解决方法
我很想创建一个扩展方法,将字符串转换为有效的CSV字段。
如果字段包含逗号或包含双引号,则必须将其用双引号引起来,并且任何双引号都必须在字符串中重复。
这是扩展方法:
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));
}
,
您需要在要加逗号的字符串中加上引号
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("\"","\"\"")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。