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 リファレンスマニュアル)