首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析CSV:边缘案例

解析CSV:边缘案例
EN

Stack Overflow用户
提问于 2012-03-15 05:10:25
回答 2查看 679关注 0票数 1

免责声明:我实际上并不是解析一个CSV,而是一个类似CSV的格式;我对使用预先构建的库并不感兴趣。

解析以下2行的正确方法是什么?:

代码语言:javascript
复制
a,b"c"d,e
a,"bc"d,e

也就是说,(a)在一个值的中间有引号,(b)在开始时有一个引号,但在下一个值之前没有结束报价。

我不知道该如何处理这些案件(这将是最直观的)。

我的想法是:(a)应该被解析为ab"c"de (引号留在),(b)应该用同样的方式解析,a"bc"de。但是让我介绍第三种情况,a,"b,c"d,e --我们在第二个逗号上用"b“和"c”分隔吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-01 21:37:43

如果您想要与Excel保持一致,下面是解析它的方法:

投入:

代码语言:javascript
复制
a,b"c"d,e
a,"bc"d,e
a,"b,c"d,e

解析(以JSON表示):

代码语言:javascript
复制
[
  ["a", "b\"c\"d", "e"],
  ["a", "bcd", "e"],
  ["a","b,cd", "e"]
]

解析逻辑是:

如果行的第一个字符(或逗号后面的第一个字符)是dbl-引号,那么:

  • 将它后面的所有内容作为“引号”处理,直到您到达结尾引号为止(当然,将一行中的两个引号视为转义的dbl-引号)。在到达“结束引号”后,从单元格值
  • 中移除开头和结尾引号,将单元格值中的结束引号后面的任何内容作为文字值包括在内,直到逗号或换行符为

为止

否则,请将逗号后的所有内容作为文字值处理,直到到达逗号或换行符时为止。

请注意,这意味着如果在单元格分隔逗号之后有一个空格,后面跟着dbl-引号,则得到的结果与逗号后面没有空格(后面跟着dbl-引号)的结果不同。

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 05:19:29

下面是我的方法(C#)中将csv吐到html表的一部分--它具有这样的逗号解析:

代码语言:javascript
复制
string[] cells = line.Split(','); // empty cells needed as well
bool noComma = true;

for (int i = 0; i < cells.Length; i++)
{
    string cellI = cells[i];
    int numberOfDoubleQuote = cellI.Count(f => f == '"');
    // == 0 means comma in between quotes
    if (numberOfDoubleQuote == 1)
    {
        noComma = !noComma;
        if (!noComma)
            sLine += "<td>" + cellI;
        else
            sLine += "," + cellI + "</td>";
    }
    else
    {
        if (noComma)
            sLine += "<td>" + cellI + "</td>";
        else
            sLine += "," + cellI;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9714322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档