Ruby CSV取り込み ヘッダーの上にいらない行がある場合の処理

はじめに

CSV取り込み処理を作ることって結構ありますよね?
たまに1行目がヘッダーではないCSVデータってありますよね?
あれ何なんでしょうね?
何でそんなことをするのかわからないんですけど、取り込まないといけないですよね?(使命感)

どんなデータ?

こんなデータ

 

実装

1、2行目をスキップして行を配列として取得するだけなら単純なんですが、
CSV.foreachと同じようにrow[‘ヘッダー名’]でデータを取得できるようにするには一工夫が必要です。

# CSVをオープン
csv = CSV.open(
  path,
  undef: :replace,
  replace: '?'
)

# ヘッダの上に邪魔な行が2行あるので除去
csv.readline
csv.readline

# ヘッダを退避
header = csv.readline

csv.each do |row|
  # CSV.foreachと同じようなデータの取り方にパース
  row = CSV.parse_line(row.join(','), headers: header)
end

おわりに

邪魔な行があったりなかったりする場合の処理はよしなにやってください。

Qiitaで見たいかはたこちら