将 DataTable 导出到 CSV 时出现逗号问题

2024-01-06

我采用了一些将 DataTable 转换为 CSV 文件的代码。它似乎工作得很好,除了在实际数据中使用逗号时。在这种情况下有没有办法显示逗号?这就是我所做的:

StringBuilder sb = new StringBuilder();

IEnumerable<string> columnNames = dtResults.Columns
                                           .Cast<DataColumn>()
                                           .Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));

foreach (DataRow row in dtResults.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText(saveFileDialog.FileName, sb.ToString());

如果字段包含逗号,则应将其放在双(或单)引号中。

你可以使用文件助手库 http://filehelpers.sourceforge.net/要创建 CSV 文件,它应该正确处理转义。

如果您不想使用该库,则重要的一点是:如果您有逗号,则必须将字段放在引号内,例如

ID, NAME
1, "Doe, John"
2, 'Doe, Jane'

如果您的字段包含引号,您应该使用附加引号对其进行转义:

3, "Anakin ""Darth Vader"", Skywalker"
4, 'O''Connor, Sinead'

一个可能的解决方案:

static string CsvEscape(this string value) {
    if (value.Contains(",")) {
        return "\"" + value.Replace("\"", "\"\"") + "\"";
    }
    return value;
}

然后在你的代码中:

IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString().CsvEscape());

PS:根据维基百科 http://en.wikipedia.org/wiki/Comma-separated_values没有真正的 csv 规范,但是RFC 4180 https://www.rfc-editor.org/rfc/rfc4180描述了一种经常使用的格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 DataTable 导出到 CSV 时出现逗号问题 的相关文章

  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 取消引用指针和访问数组元素之间的区别

    我记得有一个例子演示了指针和数组之间的区别 当作为函数参数传递时 数组会衰减为指向数组中第一个元素的指针 但它们并不等效 如下所示 file file1 c int a 2 800 801 int b 2 100 101 file file
  • 使用 hubot-test-helper 和 chai 测试 Hubot 脚本时出现断言错误

    我正在为我的 Hubot 充当 Slack 机器人 编写一个简单的测试 以检查我的机器人是否发送响应触发器的回复 我已按照中所示的示例进行操作docs https hubot github com docs scripting testin
  • 在 C 项目中使用 C++ 库会导致一长串错误

    我有一个C项目它使用一个C 库 但是 如果我编译 C 项目 我会得到一长串 未定义对 XY 的引用 errors 这些错误是由 C 引用引起的 编译时出错 In function
  • Google Apps 脚本函数 getActiveSheet() 不返回活动工作表

    Google Apps 脚本开发人员指南对 活动工作表 的定义 https developers google com apps script reference spreadsheet spreadsheet app getActiveS
  • 如何使用 Jedis 连接到 AWS ElastiCache for Redis 集群?

    以前 我们使用 Redis 时通过 AWS ElastiCache 禁用了集群模式 我们使用 Jedis 的 Java 代码指向主单节点端点 用于读取和写入 我们现在已经启用了集群模式 我们现在已更改代码以指向新 Redis 集群的配置端点
  • python中的多元(多项式)最佳拟合曲线?

    如何在 python 中计算最佳拟合线 然后将其绘制在 matplotlib 中的散点图上 我使用普通最小二乘回归计算线性最佳拟合线 如下所示 from sklearn import linear model clf linear mode
  • 创建位于屏幕下方的页脚元素

    我有一个页面没有填满整个屏幕的高度 但我希望页脚位于屏幕正下方 这样当您开始滚动时它就会显示出来 无论用户的屏幕高度如何 我如何使用 CSS 来实现这一点 EDIT 我努力了 footer position absolute left 0p
  • JavaScript 中的 Require() 函数

    当我打开 Chrome 14 的控制台并输入 require or require 如果这很重要的话 I get ReferenceError 这意味着 JavaScript 默认情况下没有该功能 对吧 至少在网络浏览器上是这样 我为什么要
  • 加载从故事板实例化的 nib 文件

    所以我对这个故事板概念还很陌生 我有一个视图笔尖放入情节提要中 每个视图笔尖都对应于我拥有的 UIViewController 子类 我尝试使用以下代码加载笔尖文件 TestViewController vc TestViewControl
  • 仅在 reloadData 完成后调用函数

    我有一个tableView并且需要执行一次功能tableView已重新加载 我怎么知道是否reloadData已完成 假设我有 methodS 填充tableView 还有一次 tableView1 reloadData 已经完成了 我要调
  • Swagger - Web API - 可选查询参数

    HttpGet Route students SwaggerOperation Tags new Student SwaggerResponse HttpStatusCode OK Type typeof ResponseModel
  • 如何在 iOS 中通过滑动手势实现卷页?

    我需要在 iOS 中使用滑动手势进行卷页 我研究过Leaves项目 https github com brow leaves https github com brow leaves 但不支持滑动手势 有人成功地用滑动手势实现了卷页吗 Th
  • 如何循环jquery返回的JSON数据? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 MVC 应用程序中返回 JSON 并循环遍历 jQuery 中返回的 json https stackoverflow com questions 5953761 how do i retur
  • 如何允许在 raphael 对象中输入文本,比如矩形?

    我创建了一个拉斐尔矩形 如下所示 var rect1 paper rect 100 100 100 100 现在 我希望当我单击矩形时会出现一个光标 并且允许用户输入 键入一些文本 我对 JS 和 Raphael 非常陌生 这不是拉斐尔的自
  • Spring:在上下文根之外提供静态资源

    在网络应用程序中 我需要提供位于应用程序上下文目录之外的静态内容 图像 整个应用程序架构要求我使用 Tomcat 来执行此操作 我以为我可以从 Spring 中受益
  • Nodejs 驱动程序支持哪些聚合游标方法?

    正如您从 Mongodb 2 6 中了解到的aggregate 操作返回一个游标 但是行为有点不同 http docs mongodb org manual reference method db collection aggregate
  • 垃圾收集是否在 GC.Collect() 之后立即运行? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这个问题只是为了研究目的 我读过很多关于 C 的书籍 这个问题总是浮现在我的脑海中 据我了解 C 是托管代码 当 CLR 决定何时运行垃圾收
  • LaTeX 中的条件导入?

    我将记下大量的课堂笔记 然后将它们编译成 LaTeX 这样我就可以拥有优秀的文档供将来查看 我正在尝试组织一些事情 以便我可以拥有一堆包含讲座笔记的小文档 然后在学期结束时将它们编译成包含所有这些笔记的大文档 我过去曾成功地使用过 impo
  • 使用 Gradle 覆盖 GCM 权限包前缀

    我有一个 Gradle Android 项目 有 4 种产品风格 每种产品都有自己独特的包名称 这build gradle文件的性质非常简单 buildscript repositories mavenCentral dependencie
  • 将 DataTable 导出到 CSV 时出现逗号问题

    我采用了一些将 DataTable 转换为 CSV 文件的代码 它似乎工作得很好 除了在实际数据中使用逗号时 在这种情况下有没有办法显示逗号 这就是我所做的 StringBuilder sb new StringBuilder IEnume