Ruby CSV文件解析,Headers赢了格式?

时间:2014-01-18 02:01:09

标签: ruby-on-rails ruby parsing csv header

我的rb文件显示:

require "csv"
puts "Program1 initialized."

contents = CSV.open "data.csv", headers: true
contents.each do |row|
  name = row[4]
  puts name
end

...但是当我在ruby中运行它时它不会加载程序。它给了我关于标题的错误消息:

syntax error, unexpected ':', expecting $end
contents = CSV.open "data.csv", headers: true

所以我想弄清楚,为什么不让ruby让我解析这个文件?我已经尝试使用其他csv文件,它将无法加载,并给我一个错误消息。我正在努力让计划的开始进行!我觉得它与标题有关。我尽可能多地更新,请注意,我使用的是ruby 1.8.7。我在其他地方读到我可以尝试在irb中运行该程序,但它似乎不需要它。所以是啊...提前谢谢!!!!

1 个答案:

答案 0 :(得分:3)

由于您在Ruby 1.8.7中使用它,:headers => true将不会以这种方式工作。 忽略标头并获取数据的最简单方法是shift数据中的第一行,即标题:

require 'csv'
contents = CSV.open("data.csv", 'r')
contents.shift

contents.each do |row|
  name = row[4]
  puts name
end

如果你想在ruby 1.8中使用带有头文件的语法,你需要使用FasterCSV,类似于:

require 'fastercsv'

FasterCSV.foreach("data.csv", :headers => true) do |fcsv_obj|
puts fcsv_obj['name']
end

(请参阅此问题以获取进一步阅读:Parse CSV file with header fields as attributes for each row