嵌入双引号的 CSV 解析

2023-12-27

我写了一个简单的 CSV 文件解析器。但看完之后有关 CSV 格式的 wiki 页面 http://en.wikipedia.org/wiki/Comma-separated_values我注意到基本格式的一些“扩展”。通过双引号专门嵌入逗号。我已经设法解析这些内容,但是还有第二个问题:嵌入双引号。

Example:

12345,"ABC, ""IJK"" XYZ" -> [1234] 和 [ABC, ""IJK"" XYZ]

我似乎找不到正确的方法来区分带双引号和不带双引号。所以我的问题是解析 CVS 格式(例如上面的格式)的正确方法/算法是什么?


我通常思考这个问题的方式基本上是将带引号的值视为单个未带引号的值or形成用引号连接的值的双引号值序列。那是,

  • to parse the next atom in the row:
    • 读取第一个非空白字符
    • if the current character is not a quote:
      • 标记当前位置
      • 读到下一个逗号或换行符
      • 返回标记和逗号之前的字符之间的文本(如果适用,请去掉空格)
    • if the current character is a quote:
      • 创建一个空字符串缓冲区
      • while the current character is not a quote
        • 标记当前位置+1(跳过引号字符)
        • 阅读下一个报价
        • 如果缓冲区不为空,则在其中添加引号
        • 将标记和当前位置之前的字符之间的文本附加到缓冲区(以去除两个引号)
        • 前进一个字符(超过刚读过的引用)
      • 读到下一个逗号或换行符
      • 返回缓冲区

本质上,拆分带引号的字符串的每个双引号段,然后用引号将它们连接在一起。因此:"ABC, ""IJK"" XYZ"变成ABC, , IJK,  XYZ,这又变成ABC, "IJK" XYZ

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

嵌入双引号的 CSV 解析 的相关文章

  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没
  • XSLT 将动态 XML 转换为 CSV 并且 XML 节点不完全重复 II

    我正在尝试创建 XSLT 将 XML 转换为 CSV 这里放置了我的 XML 和预期输出 任何人都知道如何获得以下输出 请优先分享我 我的 XML 是

随机推荐

  • 如何使用 Google Sheets 脚本查找列中第一个匹配项的索引?

    我正在尝试使用 Google Sheets 脚本查找列中第一个匹配项的索引 function getRowIndex var lookupValue car var ss SpreadsheetApp getActiveSpreadshee
  • bean实例化失败;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/log4j/Logger

    我试图让公共日志记录适用于 log4j 配置 但在启动服务器时不断出现异常 当尝试使用 StringUtils 时 我也遇到了类似的异常 该异常可通过另一个公共库获得 org springframework beans factory Be
  • 具有自定义接收器的 Spark 结构化流中的输入行数

    我在结构化流 spark 2 2 0 中使用自定义接收器 并注意到 Spark 为输入行数生成了错误的指标 它始终为零 我的流构建 StreamingQuery writeStream session readStream schema R
  • 如何根据嵌套键值删除JSONB列中的数组元素?

    如何根据对象键之一的值从数组中删除对象 该数组嵌套在父对象内 这是一个示例结构 foo1 bar1 123 bar2 456 bar1 789 bar2 42 foo2 some other stuff 我可以根据以下值删除数组元素吗bar
  • 在 Android/Jetpack Compose 中手动预填充导航后台

    是否可以在 Android Jetpack Compose 中预填充导航后台 我有一个深层链接 可以深入导航层次结构 但是 按后退时 它会导航到根路线 Example Route Main gt Route List gt Route De
  • 请求相机权限 Flutter Web

    我需要在我的网络应用程序中使用相机 所以我想如果用户拒绝在他 她的浏览器上使用相机 我会再次请求它允许相机许可 这是我的代码 import package universal html html dart as html RaisedBut
  • 何时在 Blazor 中使用 ValueChanged 和 ValueExpression?

    我在一些库 MatBlazor Telerik 中看到了这种常见模式ValueChanged and ValueExpression属性 这真的让我很困惑 两者有什么区别 以及什么时候使用它 我想添加一些用例ValueChanged and
  • 我们如何对使用 cy.get() 获取的元素进行切片,然后仅对这些特定元素运行测试?

    cy get li slice 0 5 上面的代码行不起作用 因为它显示错误消息 类型 Chainable 上不存在属性 slice 有没有办法对我们获取的元素进行切片cy get 还有其他几种方法可以做到这一点 添加伪选择器 lt 5 取
  • 流行博客文章排名算法

    我正在建立一个博客聚合器 例如Techmeme http techmeme com它可以从多个博客中查找最受欢迎的帖子 与 Techmeme 不同 我首先从各种 RSS 源聚合博客文章 然后将标题和相关 URL 保存在数据库中 之后 我必须
  • 单击工具提示内容 vuetify

    大家 我有一个问题 可以点击工具提示内容来调用任何函数吗 当我的工具提示打开时 我想单击调用测试功能的范围
  • 光滑的轮播从右到左

    我已经设置了光滑的轮播来连续滚动 但是我需要向相反的方向滚动 添加 RTL 选项似乎不起作用 在这里小提琴 目前从左到右 http jsfiddle net mth2ghod http jsfiddle net mth2ghod funct
  • 要解密的数据超出了该模数的最大值 128 字节。 RSA解密c#

    我不知道如何在使用 X509 证书中的私钥解密文件时解决此异常 要解密的数据超出了该模数 128 字节的最大值 byte data File ReadAllBytes F enc test file1 txt X509Certificate
  • 本机库未在设备上运行

    我已将armeabi armeabi v7a 文件夹放入libs 文件夹中 而不是放入maven 存储库中 但我在使用 libgdx 时遇到以下错误 库 gdx backend jogl natives jar 包含不会在设备上运行的本机库
  • 获取特定 div 的 span 类内的文本

    我正在 T Mobile 网站上查找有关三星 Galaxy S9 的评论 我能够为 HTML 代码创建一个 Beautiful Soup 对象 但我无法获取 span 类中存在的评论文本 还需要遍历评论页面以收集所有评论 我尝试了 2 个代
  • jquery 调用 highcharts 生成错误 17

    我试图从 highcharts com 获取一个仪表 在我已经完成示例的页面上工作 但我看不出我做错了什么 如果有人能指出正确的方向 这是我的小提琴 高图仪表不工作 http jsfiddle net F6XUT 这是我的代码
  • Oracle:结合使用 ROWNUM 和 ORDER BY 子句更新表列

    我想用连续的整数填充表列 所以我考虑使用 ROWNUM 但是 我需要根据其他列的顺序填充它 例如ORDER BY column1 column2 不幸的是 这是不可能的 因为 Oracle 不接受以下声明 UPDATE table a SE
  • 使用高分辨率纹理优化 SceneKit 性能

    我是一位相当有经验的 iOS 开发人员 但完全是 SceneKit 新手 试图在基本应用程序中模拟一些行星 为此 我使用火星 金星等的高分辨率法线和漫反射贴图 应用于基本球体 他们工作了 它们看起来棒极了 正是我想要的 问题是 我得到了ki
  • Jquery 模式对话框禁用滚动条

    正如您在此链接中看到的 http jsbin com ozapol 9 http jsbin com ozapol 9 Jquery 在某些版本的 IE 和最新版本的 Chrome 上禁用滚动条 我还没尝试过其他的 有没有办法保持滚动条启用
  • 正则表达式中的命名捕获组

    我需要正则表达式的帮助来捕获以下字符串中的数字和连字符 一些文字和东西 200 1234EM 一些其他东西 它也可以不带连字符的部分出现 一些文本 123EM 其他文本 我需要在命名捕获组中使用 200 1234 或 123 我试过这个 b
  • 嵌入双引号的 CSV 解析

    我写了一个简单的 CSV 文件解析器 但看完之后有关 CSV 格式的 wiki 页面 http en wikipedia org wiki Comma separated values我注意到基本格式的一些 扩展 通过双引号专门嵌入逗号 我