用Ruby中的头文件解析CSV?

时间:2012-06-04 13:59:23

标签: ruby parsing csv

这有效:

    require 'csv'
    file = CSV.open(filename)
    puts file.shift

这不是:

    require 'csv'
    file = CSV.open(filename, :headers=>true)
    puts file.shift

我明白了:

C:/Program Files (x86)/IronRuby 1.1/Lib/ruby/1.9.1/csv.rb:2177:in `convert_field
s': undefined method `with_index' for IronRuby.Builtins.Enumerator:Enumerator (N
oMethodError)
    from C:/Program Files (x86)/IronRuby 1.1/Lib/ruby/1.9.1/csv.rb:2218:in `
parse_headers'
    from C:/Program Files (x86)/IronRuby 1.1/Lib/ruby/1.9.1/csv.rb:1918:in `
shift'
    from C:/Program Files (x86)/IronRuby 1.1/Lib/ruby/1.9.1/csv.rb:1818:in `
loop'
    from C:/Program Files (x86)/IronRuby 1.1/Lib/ruby/1.9.1/csv.rb:1818:in `
shift'
    from C:/myproject/myproject/myproject/Program.rb:3

我正在使用Ironruby 1.1.3

我正在寻找正确的语法来获得带有headers选项的单行。

2 个答案:

答案 0 :(得分:2)

我在不同的引擎中对此进行了测试,这似乎是Ironruby中的一个错误

答案 1 :(得分:0)

您可以尝试这一点,请注意colsep,使其适应CSV文件中的内容。 如果要显示标题:

require 'csv'

path = "G:/documents/musicinfo"
Dir.glob("#{path}/**/*.csv").each {|file|
  CSV.foreach(file, :col_sep => ';') do |row|
    puts "#{file} => #{row}"
    break
  end
}

作为数组:

G:/documents/musicinfo/album.csv => ["album_release_year", "album_id", "artist_id", "album"]
G:/documents/musicinfo/artist.csv => ["artist_id", "artist_name"]
G:/documents/musicinfo/Copy of all2.csv => ["album_release_year,album_id,track_id,artist_id,artist_name,duration,genre,track_popularity,disc_number,track_number,track,album"]
G:/documents/musicinfo/genres.csv => ["genreId", " genreNaam"]
G:/documents/musicinfo/songs.csv => ["album_id", " track_id", " artist_id", " track_popularity", "genre_id", "track"]

并且,如果您想要显示第一个数据行或将其保持为CSV,请使用以下内容进行修改:

CSV.foreach(file, :col_sep => ';', :headers => true) do |row|

给出了:

G:/documents/musicinfo/album.csv => 0000,10747312,11522976,Beyond Imagination (Bonus Track Version)
G:/documents/musicinfo/artist.csv => 10000004,Jimi Hendrix
G:/documents/musicinfo/Copy of all2.csv => "2008,12877382,24516577,10000004,Jimi Hendrix,05:39,Pop,9,16,1,10,Free spirit"
G:/documents/musicinfo/genres.csv => 1,Alternative
G:/documents/musicinfo/songs.csv => 12877382,24516577,10000004,9,16,Free spirit
相关问题