CSV.open(name, "r").each do |row|
puts row
end
我得到了以下错误:
CSV::MalformedCSVError Unquoted fields do not allow \r or \n
这个文件的名称是一个 .txt 的制表符分隔文件,我特意制作了它。我有一个 .csv 文件,我打开它在 Excel 中,并将文件保存为 .txt 制表符分隔的格式。所以它是使用制表符分隔的。
CSV.open
不应该可以读取制表符分隔的文件吗?
CSV.open(name, "r").each do |row|
puts row
end
我得到了以下错误:
CSV::MalformedCSVError Unquoted fields do not allow \r or \n
这个文件的名称是一个 .txt 的制表符分隔文件,我特意制作了它。我有一个 .csv 文件,我打开它在 Excel 中,并将文件保存为 .txt 制表符分隔的格式。所以它是使用制表符分隔的。
CSV.open
不应该可以读取制表符分隔的文件吗?
尝试像这样指定字段分隔符:
CSV.open("name", "r", { :col_sep => "\t" }).each do |row|
puts row
end
记得要 require 'csv'
并阅读文档
CSV
使用逗号作为分隔符,这是因为CSV代表“逗号分隔值”。如果您想要不同的分隔符(在本例中为制表符),则需要明确指定。
示例:p CSV.new("aaa\tbbb\tccc\nddd\teee", col_sep: "\t").read
相关文档: http://ruby-doc.org/stdlib-2.1.0/libdoc/csv/rdoc/CSV.html#new
该链接提供了有关Ruby CSV库中的“新建”方法的文档。该方法可用于创建CSV对象,以便读取或写入CSV文件。请参阅文档以获取更多详细信息。p File.read(name)
- Jesus CastelloCSV :: MalformedCSVError
。这清楚地说明问题是文件格式不正确。 - engineersmnkyCSV
的选择,您也可以像这样使用 smarter_csv
:require 'smarter_csv'
data = SmarterCSV.process(filename, col_sep: "\t")
如果您使用的是smarter_csv >= 1.4.2
,您也可以这样做:
require 'smarter_csv'
data = SmarterCSV.process(filename, col_sep: :auto)
SmarterCSV将返回一个哈希数组,并且可以进行批处理