ruby:csv操作
CSVデータの操作サンプル。
parse すると、array になる。
>> require 'csv' => true >> require 'pp' => false >> s = <<EOS id,first name,last name,age 1,taro,tanaka,20 2,jiro,suzuki,18 EOS >> pp s "id,first name,last name,age\n" + "1,taro,tanaka,20\n" + "2,jiro,suzuki,18\n" => "id,first name,last name,age\n1,taro,tanaka,20\n2,jiro,suzuki,18\n" >> pp CSV.parse(s) [["id", "first name", "last name", "age"], ["1", "taro", "tanaka", "20"], ["2", "jiro", "suzuki", "18"]] => [["id", "first name", "last name", "age"], ["1", "taro", "tanaka", "20"], ["2", "jiro", "suzuki", "18"]]
heades: true 指定してparaseすると扱いやすい。
>> pp CSV.parse(s, headers: true) #<CSV::Table mode:col_or_row row_count:3> => #<CSV::Table mode:col_or_row row_count:3> ss = CSV.parse(s, headers: true) ss.each do |row| p row end >> ss.each do |row| ?> p row >> end #<CSV::Row "id":"1" "first name":"taro" "last name":"tanaka" "age":"20"> #<CSV::Row "id":"2" "first name":"jiro" "last name":"suzuki" "age":"18"> => #<CSV::Table mode:col_or_row row_count:3> ss.each do |row| p row["age"] end >> ss.each do |row| ?> p row["age"] >> end "20" "18" => #<CSV::Table mode:col_or_row row_count:3>
その他、いろいろな操作。
sss = ss.map {|row| row['first name']} >> sss = ss.map {|row| row['first name']} => ["taro", "jiro"] ss.each.with_index do |row, i| p i p '------------------------' row.each do |k, v| p k + ' = ' + v end end >> ss.each.with_index do |row, i| ?> p i >> p '------------------------' >> row.each do |k, v| ?> p k + ' = ' + v >> end >> end 0 "------------------------" "id = 1" "first name = taro" "last name = tanaka" "age = 20" 1 "------------------------" "id = 2" "first name = jiro" "last name = suzuki" "age = 18" => #<CSV::Table mode:col_or_row row_count:3>
CSV.parse (Ruby 3.1 リファレンスマニュアル)
CSV.new (Ruby 3.1 リファレンスマニュアル)