Ruby on rails RAILS 3 CSV“;“非法引用”;这是一个谎言
我在分析CSV文件时遇到问题,出现以下错误: CSV::MalformedCSV错误:第3行上的非法报价 有问题的RAILS代码:Ruby on rails RAILS 3 CSV“;“非法引用”;这是一个谎言,ruby-on-rails,ruby,csv,Ruby On Rails,Ruby,Csv,我在分析CSV文件时遇到问题,出现以下错误: CSV::MalformedCSV错误:第3行上的非法报价 有问题的RAILS代码: csv = CSV.read(args.local_file_path, col_sep: "\t", headers: true) CSV文件中的第3行是: A-067067 VO VIA CE 0 8 8 SWCH Ter 4, Loc Is Here, Mne, Per Fl
csv = CSV.read(args.local_file_path, col_sep: "\t", headers: true)
CSV文件中的第3行是:
A-067067 VO VIA CE 0 8 8 SWCH Ter 4, Loc Is Here, Mne, Per Fl Auia/Sey IMAC NEK_HW 2011-03-09 09:47:44 2011-03-09 11:50:26 2011-01-13 10:49:17 2011-02-14 14:02:43 2011-02-14 14:02:44 0 0 771 771 46273 "[O/H 15/02] B270 W31 ""TEXT TEXT 2 X TEXT SWITC" SOME_TEXT SOME_TEXT N/A Name Here RESOLVED_CLOSED RESOLVED_CLOSED
更新:上面的选项卡似乎没有出现。请参见pastebin原始文本:
我在StackOverflow和Google上读过很多关于为什么会这样的帖子,我理解这一点。但是上面的CSV行有完全合法的引用,不是吗?
CSV是以制表符分隔的,并且只有一个制表符跟在相关列两侧的引号后面。该字段中有1个引号,它被双引号转义。那么是什么原因呢?我想不出来(
假设我这里出了问题,我希望解决方案包括一种解决问题的方法,因为我无法控制CSV的构造方式。您的CSV的这一部分有问题:
46273 "[O/H 15/02] B270 W31 ""TEXT TEXT 2 X TEXT SWITC" SOME_TEXT
这些零件中至少有一个具有杂散空间:
46273 "
" SOME_TEXT
我猜“3”和double应该由一个或多个制表符分隔,但在引号之前有一个空格。或者,在另一端的引号之后有一个空格,而在结束引号和“S”之间应该只有制表符
CSV通过将双引号加倍来转义双引号,因此:
"[O/H 15/02] B270 W31 ""TEXT TEXT 2 X TEXT SWITC"
应为包含嵌入报价的单个字段:
[O/H 15/02] B270 W31 "TEXT TEXT 2 X TEXT SWITC
如果在第一个引号之前或最后一个引号之后有空格,那么由于字段是以制表符分隔的,因此字段中有一个不带空格的双引号,这就是“非法引号”错误的来源
尝试通过
cat-t
(应将选项卡表示为^I
)发送您的CSV文件,以查找散乱空间的位置。您的CSV的这部分有故障:
46273 "[O/H 15/02] B270 W31 ""TEXT TEXT 2 X TEXT SWITC" SOME_TEXT
这些零件中至少有一个具有杂散空间:
46273 "
" SOME_TEXT
我猜“3”和double应该由一个或多个制表符分隔,但在引号之前有一个空格。或者,在另一端的引号之后有一个空格,而在结束引号和“S”之间应该只有制表符
CSV通过将双引号加倍来转义双引号,因此:
"[O/H 15/02] B270 W31 ""TEXT TEXT 2 X TEXT SWITC"
应为包含嵌入报价的单个字段:
[O/H 15/02] B270 W31 "TEXT TEXT 2 X TEXT SWITC
如果在第一个引号之前或最后一个引号之后有空格,那么由于字段是以制表符分隔的,因此字段中有一个不带空格的双引号,这就是“非法引号”错误的来源
请尝试通过
cat-t
(应将选项卡表示为^I
)发送您的CSV文件,以查找散乱空间的位置。啊,我刚检查过,在复制粘贴到Stackoverflow中似乎没有遇到选项卡。请在pastebin中查看原始文本:[snip,请稍候]@S.Richmond:该pastebin解析得很好。你确定这是第三行吗?@S.Richmond:也很好。删除标题行并逐个添加其余行,直到其中断。啊,我刚刚检查过,在copy-n-paste to Stackoverflow中似乎没有遇到制表符。请在pastebin上查看原始文本:[剪贴,请稍候]@S.Richmond:该pastebin解析得很好。你确定这是第三行吗?@S.Richmond:也可以。删除标题行,然后逐个添加其余行,直到行中断。