filter(options = Hash.new) {|row| ... }
[permalink][rdoc][edit]filter(input, options = Hash.new) {|row| ... }
filter(input, output, options = Hash.new) {|row| ... }
-
このメソッドは CSV データに対して Unix のツール群のようなフィルタを構築するのに便利です。
与えられたブロックに一行ずつ渡されます。ブロックに渡された行は必要であれば変更することができます。ブロックの評価後に行を全て output に書き込みます。
- [PARAM] input:
- String か IO のインスタンスを指定します。デフォルトは ARGF です。
- [PARAM] output:
- String か IO のインスタンスを指定します。デフォルトは $stdout です。
- [PARAM] options:
- ":in_", ":input_" で始まるキーは input にだけ適用されます。 ":out_", ":output_" で始まるキーは output にだけ適用されます。それ以外のキーは両方に適用されます。 ":output_row_sep" のデフォルト値は $/ です。
# $ echo "header1,header2\nrow1_1,row1_2" > in.csv; ruby test.rb in.csv require "csv" options = { headers: true, return_headers: true, write_headers: true } CSV.filter(options) do |row| if row.header_row? row << "header3" next end row << "row1_3" end # => header1,header2,header3 # row1_1,row1_2,row1_3
require "csv" content = <<EOS id,first name,last name,age 1,taro,tanaka,20 2,jiro,suzuki,18 3,ami,sato,19 4,yumi,adachi,21 EOS File.write('test.csv',content) options = { headers: true, return_headers: true, write_headers: true } CSV.filter(File.open("test.csv"), File.open("out.csv", "w"), options) do |row| if row.header_row? row << "full name" next end row << row["first name"] + " " + row["last name"] end # out.csv の内容 # => id,first name,last name,age,full name # 1,taro,tanaka,20,taro tanaka # 2,jiro,suzuki,18,jiro suzuki # 3,ami,sato,19,ami sato # 4,yumi,adachi,21,yumi adachi
[SEE_ALSO] CSV.new