如何解析Ruby中带有转义换行符的CSV文件?我在CSV或FasterCSV中看不到任何明显的东西。
以下是一些示例输入:
"foo", "bar"
"rah", "baz \
and stuff"
"green", "red"
在Python中,我会这样做:
csvFile = "foo.csv"
csv.register_dialect('blah', escapechar='\\')
csvReader = csv.reader(open(csvFile), "blah")
答案 0 :(得分:7)
如果包含换行符的字段被正确引用(如示例数据中所示),那么Ruby的csv解析器可以很好地处理它们。但是,如果你想要Ruby来删除转义字符(正如Python似乎可以通过设置escapechar
来完成),那么我也没有在Ruby文档中看到这样的方法。 (顺便说一句,从Ruby 1.9开始,FasterCSV是Ruby的默认csv实现。)
#!/usr/bin/env ruby -w
require 'csv'
CSV.foreach('test.csv') do |rec|
puts "Record: #{rec}"
end
输出:
telemachus ~ $ ruby read.rb
Record: ["foo", "bar"]
Record: ["rah", "baz \\\nand stuff"]
Record: ["green", "red"]
答案 1 :(得分:1)
我不是Ruby专家,所以请原谅任何错误。
你不能用正则表达式(我知道)一步完成。上面的Python代码不是正则表达式,所以不要期望使用执行相同操作的正则表达式。
你可以使用Perl compatable regex分两步完成它,但是当我在已安装的Ruby版本上尝试它时,Ruby抱怨道。您通常会读取整个文件,然后使用负向lookbehind split()文件,然后split()从a上返回的每个元素。
例如:
$allLines=$wholeFile.split(/(?<!\\)\n/m);
但Ruby抱怨(?&lt;!序列无法识别。所以你可能不得不求助于其他方法。我建议专门设计用于解析CSV的库,例如:{{3 }}