RubyでCSVファイルの読み取り

2021年11月23日火曜日

Ruby

t f B! P L
CSV読み取り

[adsense]

CSV.foreach メソッド

サンプルコード

require  'csv'

# CSVファイルのパスを指定して、CSVの行数分ブロックの評価を行う
CSV.foreach("path/to/filename.csv") do |row|
	# 1列目の値を取り出す
	p row[0]
end

構文

CSV.foreach(path, options = Hash.new) {|row| ... } -> nil

options で指定可能な内容

key 内容
:col_sep フィールドの区切り文字列を指定します。
:quote_char フィールドをクオートする文字を指定します。長さ 1 の文字列でなければなりません。正しいダブルクオートではなく間違ったシングルクオートを使用しているアプリケーション で便利です。
:headers true を指定すると、CSV ファイルの一行目をヘッダとして扱います。 配列を指定するとそれをヘッダとして扱います。
:skip_blanks 真を指定すると、空行を読み飛ばします。
:skip_lines 指定した正規表現にマッチしたそれぞれの行をコメントとして読み飛ばします。

エンコーディングの問題

foreach メソッドの場合、UTF-8のファイルしか処理出来ません。
UTF-8、Shift-JIS両方に対応したい場合は、
open関数でエンコーディング指定でファイルを開いた後、
CSV.new で CSVファイルの内容を読み込みます。

open("path/to/filename.csv", "rb:Shift_JIS:UTF-8", undef: :replace) do |f|
  CSV.new(f).each do |row|
  	# 1列目の値を取り出す
    p row[0]
  end
end

CSV.new コンストラクタ

構文

CSV.new(f, options = Hash.new) {|row| ... } -> nil

引数 f には、String か IO のインスタンスを指定します。
String を指定する場合は、 “111, 2222, 333” などの CSV データを指定します。

options で指定可能な内容

CSV.foreach 関数と同じオプションが指定可能です。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ