🐘

【Ruby】CSV クラスの扱い

2024/03/31に公開

概要

前回 File クラスの扱いについて説明したので、今回は CSV について、よく使うメソッドについて説明します。
https://zenn.dev/ebina_shohei/articles/c084f1ea62c325

open

File クラスとにており、ブロックを渡すことができます。
また、第二引数でモードの選択もできます。

# 読み込み
CSV.open("./sample_file") do |csv|
  # csv.read などのファイル操作
end

# 書き込み
CSV.open("./sample_file", "w") do |csv|
  csv << ["firstName", "lastName","Age"]
  csv << ["Tanaka", "Ichiro", 20]
  csv << ["Yamada", "Hanako", 25]
end

foreach

CSV.foreach を使うと、1行ずつ読み込むことができ、大量のデータを効率よく処理することができます。
以下のようなファイルがあった場合、

sample_file
firstName,lastName,Age
Tanaka,Ichiro,20
Yamada,Hanako,25

foreach を使うと以下のように処理できます。
このとき、ブロック引数の row は、各行の配列となります。

results = []
CSV.foreach("./sample_file") do |row|
  results << row[0]
end

results
=> ["firstName", "Tanaka", "Yamada"]

headersオプションを true にすると、最初の行(ヘッダー)を除き、それ以外の行をハッシュ形式のように取得することができます。

results = []
CSV.foreach("./sample_file", headers: true) do |row|
  results << row["firstName"]
end

results
=> ["Tanaka", "Yamada"]

Discussion