【发布时间】:2012-05-10 21:11:43
【问题描述】:
假设我要解析文件
$ cat toParse.txt 1 2 3 4 5 1 "2 3" 4 5 1 2" 3" 4 5前两行很容易解析:Text::CSV 可以处理。例如,我尝试过:
但是,如果引号字符包含在标记化字段内中,CSV 会变得非常混乱。
上面的程序打印出来:
字段[1] = 2 不好的论点: 字段[1] = 2 3 不好的论点: 字段[1] = 错误参数:1 2" 3" 4 5有人有什么建议吗?我想用2" 3 " 填充最后的fields[1] ...换句话说,我想在引号字符串中不包含的任何空白处拆分行。
【问题讨论】:
-
我想在空格字符
" "上分割每一行,只要空格不包含在带引号的字符串中。 -
我认为
allow_loose_quotes => 1会做到的。 -
allow_loose_quotes => 1肯定有帮助,但如果在松散引号内有sep_char,解析器仍然会中断。 -
“我认为”是因为我不知道在那种情况下会发生什么。呃,好吧。正如有人所说, Text::CSV(_XS) 无论如何都不是正确的工具。而且你手上有一个非常奇怪的格式。
-
是的,我知道这很奇怪,但不幸的是,我必须一直处理看起来像这样的东西;数据并不总是巧妙地构造:) 我总是使用正则表达式来处理它,但我想我希望有一个更清洁的解决方案。