免责声明:我实际上并不是解析一个CSV,而是一个类似CSV的格式;我对使用预先构建的库并不感兴趣。
解析以下2行的正确方法是什么?:
a,b"c"d,e
a,"bc"d,e也就是说,(a)在一个值的中间有引号,(b)在开始时有一个引号,但在下一个值之前没有结束报价。
我不知道该如何处理这些案件(这将是最直观的)。
我的想法是:(a)应该被解析为a,b"c"d,e (引号留在),(b)应该用同样的方式解析,a,"bc"d,e。但是让我介绍第三种情况,a,"b,c"d,e --我们在第二个逗号上用"b“和"c”分隔吗?
发布于 2022-01-01 21:37:43
如果您想要与Excel保持一致,下面是解析它的方法:
投入:
a,b"c"d,e
a,"bc"d,e
a,"b,c"d,e解析(以JSON表示):
[
["a", "b\"c\"d", "e"],
["a", "bcd", "e"],
["a","b,cd", "e"]
]解析逻辑是:
如果行的第一个字符(或逗号后面的第一个字符)是dbl-引号,那么:
为止
否则,请将逗号后的所有内容作为文字值处理,直到到达逗号或换行符时为止。
请注意,这意味着如果在单元格分隔逗号之后有一个空格,后面跟着dbl-引号,则得到的结果与逗号后面没有空格(后面跟着dbl-引号)的结果不同。
发布于 2012-03-15 05:19:29
下面是我的方法(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;
}
}https://stackoverflow.com/questions/9714322
复制相似问题