【问题标题】:Ruby CSV File Parsing, Headers won't format?Ruby CSV 文件解析,标题不会格式化?
【发布时间】:2014-02-07 13:32:25
【问题描述】:

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

【问题讨论】:

  • headers: true 语法在 1.8.7 中不起作用,你想说:headers => true。但这并不能解决整个问题,因为 sammy 在下面所说的。
  • 谢谢终于搞定了。我想我只需要更新 ruby​​ :/ (noobnesss)

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


【解决方案1】:

由于您在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2021-09-15
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多