我有一个恶意格式.csv
文件,这是由一些额外的\n
引起的。例如:红宝石正则表达式删除额外 n
Name,Comment
"Peter","Good morning"
"Paul","How are you
"
"Mary","Fine"
第2行以不需要的额外\n
结尾。
如何删除所有尾随\n
s后面没有后跟双引号"
(假设整个文件已被读入字符串)?
我有一个恶意格式.csv
文件,这是由一些额外的\n
引起的。例如:红宝石正则表达式删除额外 n
Name,Comment
"Peter","Good morning"
"Paul","How are you
"
"Mary","Fine"
第2行以不需要的额外\n
结尾。
如何删除所有尾随\n
s后面没有后跟双引号"
(假设整个文件已被读入字符串)?
不要将整个东西读入字符串,请使用标准CSV parser in 1.9来读取它。如果你有,比如说,pancakes.csv
,则:
require 'csv'
data = CSV.open('pancakes.csv').map { |r| r.map(&:strip) }
# or
data = CSV.open('pancakes.csv').map { |r| r.map(&:chomp) }
然后你就在data
有这样的:
[
["Name", "Comment"],
["Peter", "Good morning"],
["Paul", "How are you"],
["Mary", "Fine"]
]
所以,你可以让你的数据都是干净的,并很好地解析很简单。如果你只需要清理一些其他无法处理嵌入换行符的程序的CSV,那么你可以使用CSV将它重新写回。
为什么不只是为不以双引号结尾的行添加尾随双引号,并删除空行(只有双引号的行)?
由于某种原因,我必须留在1.8.7和使用'fastercsv'。 'fastercsv'中有类似吗?谢谢! – ohho
@ohho:AFAIK 1.9的'csv'只是'fastercsv'和一些Unicode补丁,所以它应该和1.8中的'fastercsv'一样。 –
它给出与'FasterCSV.foreach'相同的错误,即:'FasterCSV :: MalformedCSVError(FasterCSV :: MalformedCSVError)' – ohho