解析CSV:Edge Cases

时间:2012-03-15 05:10:26

标签: parsing csv dataformat

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

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

a,b"c"d,e
a,"bc"d,e

即,(a)在值的中间加引号,(b)在开头有一个引号,但在下一个值之前没有结束引号。

我无法弄清楚我应该如何处理这些情况(这将是最直观的)。


我的想法是(a)应该被解析为ab"c"de(左边的引号),(b)应该以相同的方式解析,{{ 1}},a"bc"d。但接下来让我介绍一个第三个案例,e - 我们是否在第二个逗号之间拆分了" b"和" c"不是吗?

1 个答案:

答案 0 :(得分:0)

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

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;
    }
}