2014-01-18 2 views
1

мой гь файл читает:Ruby CSV File Parsing, Headers wont format?

require "csv" 
puts "Program1 initialized." 

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

... но когда я запускаю его в рубин это обыкновение загружать программу. это дает мне сообщение об ошибке о заголовках:

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

так им пытаются выяснить, почему обыкновение рубин позвольте мне разобрать этот файл? ive попробовал использовать другие файлы csv, которые у меня есть, и он не загружается, и дает мне сообщение об ошибке. Я пытаюсь только начать начало программы! я чувствую, что это связано с заголовками. Я обновляю столько, сколько могу, заметьте, что вы используете ruby ​​1.8.7. Я читал где-то еще, что я мог бы попытаться запустить программу в irb, но мне не показалось, что это нужно. так что да ... спасибо заранее !!!!

+0

Параметр 'заголовки: синтаксис true' не работает в 1.8.7, вы бы хочу сказать ': headers => true'. Но это не решит всю проблему из-за того, что говорит самми. –

+0

Спасибо, наконец, получил работу. Думаю, мне нужно было просто обновить ruby:/(noobnesss) – KnightKing

ответ

2

Поскольку вы используете это с 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)