我的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中运行该程序,但它似乎不需要它。所以是啊...提前谢谢!!!!
答案 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)