Ruby で自家製スクリプトを書く 04
FasterCSV を配列に格納する
#!/bin/env ruby $KCODE='utf8' require 'kconv' require 'rubygems' require 'fastercsv' csv = 'sample.csv' # CSV ファイルの文字コード input_char_encoding = 'Shift-JIS' # SQL 文を保存するファイルの文字コード output_char_encoding = 'UTF-8' def convert_char_encoding(encoding, data) begin case encoding when 'jis' return Kconv.tojis(data) when 'Shfit-JIS' return Kconv.tosjis(data) when 'EUC-JP' return Kconv.toeuc(data) when 'UTF-8' return Kconv.toutf8(data) else # 日本語にはない文字コードならばエラーを発生させる exit(1) end rescue SystemExit => e p 'set invalid charcter encoding or nil.' exit(0) end end FasterCSV.foreach(csv) do |row| # 配列の構成 p row row.each do |column| # 要素の構成 p (input_char_encoding == output_char_encoding) ? column : convert_char_encoding(output_char_encoding, column) end end
実行をしてみる。
% ruby openfile.rb openfile.rb:41: warning: don't put space before argument parentheses /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1592:in `shift': Unclosed quoted field on line 1. (FasterCSV::MalformedCSVError) from /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1512:in `loop' from /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1512:in `shift' from /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1457:in `each' from /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1003:in `foreach' from /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1175:in `open' from /usr/lib/ruby/gems/1.8/gems/fastercsv-1.2.3/lib/faster_csv.rb:1002:in `foreach' from openfile.rb:36
エラーが発生したので、FasterCSV のドキュメントを確認してみる。