[ruby]csv編集

classCSV

CSVクラス(Ruby 2.3.0 リファレンスマニュアル)

options

CSV.newのオプション。
read,foreach,open,tableなどのメソッドに同様の指定が可能。

default options
options = {
:col_sep => ',',
:row_sep => ':auto',
:quote_char => '"',
:field_size_limit => nil,
:unconverted_fields => nil,
:headers => false,
:return_headers => false,
:header_converters => nil,
:skip_blanks => false,
:force_quotes => false,
:skip_lines => nil,
}
option value 説明
:col_sep str 列区切り文字
:row_sep str 行区切り文字
:quote_char str クォート文字
:field_size_limit Fixnum フィールドの最大値
:headers bool 一行目を見出しとして扱う
:skip_blanks bool 空行読み飛ばし
:force_quotes bool 強制クォート
:skip_lines regexp 一致行を飛ばす
:encoding bef:aft 文字コード変換
:converters func 値を変換

foreach

foreach.rbCSV.foreach
#CSV.foreach
CSV.foreach(path, options){|row|}

read

read.rbCSV.read
#read
csv_read = CSV.read(path, options)
#each
csv_read.each{|row|}
#row
headers, *row = csv_read
#column
*column = row.transpose

table

CSV.readに特定のオプションを指定したメソッド。

table.rbCSV.table
#table
csv_table = CSV.table(path, options)

#CSV.tableは以下と同義
CSV.read(path, {
headers: true,
converters: :numeric,
header_converters: :symbol
}.merge(options))

#each
csv_table.each{|row|}
#row
csv_table[i]
#column
csv_table[:header]

open

open.rbCSV.open
#open
csv = CSV.open(path, mode, options)
#overwrite
CSV.open(path, 'w:UTF-8'){|csv|
csv << row
}
#add line
CSV.open(path, 'a:UTF-8'){|csv|
csv << row
}

mode

mode 説明
r 読み込み
w 書き込み
a 追記
b バイナリモード

encoding

encoding.rb
def csv_encoding_sjis(path_read, path_dist)
dist = CSV.open(path_dist, 'wb')
CSV.foreach(path_read, encoding: 'UTF-8:SJIS') do |row|
dist << row
end
end

lines_count

lines.rb
#foreach(行目)
CSV.foreach(path){|row|
p "#{$.}行目"
}

#table(行数)
#headerを含まない行数を出力
CSV.table(path).count

#File.read(行数)
#区切り列が改行である場合
File.read(path).count("\n")

#File.open(行数)
File.open(path){|f|
nil while f.gets
p f.lineno
}