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 のドキュメントを確認してみる。