quote_char导致适合ruby CSV导入
发布时间:2020-12-17 03:05:21 所属栏目:百科 来源:网络整理
导读:我有一个使用|的简单CSV文件(管道)作为引用字符.将我的rails应用程序从 Ruby 1.9.2升级到1.9.3后,我收到“CSV :: MalformedCSVError:第1行中缺少或流浪的引用”错误. 如果我弹出打开vim并替换|使用常规引号,单引号甚至“=”,文件工作正常,但是|和*导致错误.
我有一个使用|的简单CSV文件(管道)作为引用字符.将我的rails应用程序从
Ruby 1.9.2升级到1.9.3后,我收到“CSV :: MalformedCSVError:第1行中缺少或流浪的引用”错误.
如果我弹出打开vim并替换|使用常规引号,单引号甚至“=”,文件工作正常,但是|和*导致错误.有人对可能导致这种情况的原因有任何疑问吗?这是一个可以重现错误的简单单线程: @csv = CSV.read("public/sample_file.csv",{quote_char: '|',headers: false}) 同样在Ruby 2.0和irb w / out load rails中重现了这一点. 编辑:以下是CSV中的一些示例行 |076N102 |,|CARD |,| 1|,|NEW|,|PCS | |07-1801 |,|BASE |,| 18|,|PCS | 解决方法
我想你刚刚发现了CSV ruby??模块中的一个错误.
来自csv.rb: 1587: @re_chars = /#{%"[-][.^$?*+{}()|# rntfv]".encode(@encoding)}/ 此Regexp用于转义与特殊正则表达式符号冲突的字符,包括“管道”char | . 编辑:只有当不作为主角时,连字符必须在字符集表达式(用方括号[]括起来)内进行转义.所以不得不更新固定的Regexp: 1587: @re_chars = /#{%"(?<![)-(?=.*])|[.^$?*+{}()|# rntfv]".encode(@encoding)}/ CSV.read('sample.csv',{quote_char: '|'}) # [["076N102 ",# "CARD ",# " 1","NEW","PCS "],# ["07-1801 ",# "BASE ",# " 18","PCS "]] 由于大多数语言不支持带有量词的lookbehind表达式,包括Ruby,我不得不把它写成左括号的负面版本.它还会匹配连字符与缺少左侧一个括号对的连字符.如果您找到更好的解决方案,请发表评论. 很高兴听到任何评论,然后填写错误报告给ruby-lang.org. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |