gpt4 book ai didi

c++ - 嵌入式双引号的 CSV 解析

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:19 24 4
gpt4 key购买 nike

我编写了一个简单的 CSV 文件解析器。但是看了wiki page on CSV formats之后我注意到一些基本格式的“扩展”。通过双引号专门嵌入逗号。我已经设法解析了那些,但是还有第二个问题:嵌入的双引号。

例子:

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

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

最佳答案

我通常的思考方式基本上是将带引号的值视为单个未带引号的值由双引号组成的由引号连接的值的序列。也就是说,

  • 解析行中的下一个原子:
    • 阅读第一个非空白字符
    • 如果当前字符不是引号:
      • 标记当前位置
      • 读到下一个逗号或换行符
      • 返回标记和逗号前字符之间的文本(如果合适,去掉空格)
    • 如果当前字符是引号:
      • 创建一个空字符串缓冲区
      • 当前字符不是引号
        • 标记当前位置+1(跳过引号字符)
        • 阅读下一句引文
        • 如果缓冲区不为空,则向其附加引号
        • 将标记和当前位置之前的字符之间的文本附加到缓冲区(去除两个引号)
        • 前进一个字符(超过刚刚阅读的引用)
      • 读到下一个逗号或换行符
      • 返回缓冲区

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

关于c++ - 嵌入式双引号的 CSV 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com