Ruby で自家製スクリプトを書く 02

文字コードを変換させる

読み込みもとの CSV ファイルと出力先の SQL ファイルの文字コードが一致しない場合、文字コードを変換させる処理を行う。
fileopen.rb

#!/bin/env ruby
$KCODE='utf8'
require 'kconv'
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

File.open(csv) do |fp|
  # read メッソドを利用すると、一気にファイルを読み込めるが、
  # 数十万行を処理する場合もあるので、1行ずつ読み込むようにする
  while line = fp.gets
    p (input_char_encoding == output_char_encoding) ? line : convert_char_encoding(output_char_encoding, line)
  end
end

正しい値を「output_char_encoding」に代入して実行する。

% ruby openfile.rb
"\"1\", \"myname\", \"myaddress\", \"123-4567\"\n"
"\"2\", \"yourname\", \"youraddress\", \"890-1234\"\n"
"\"3\", \"hisname\", \"hisaddress\", \"\"\n"
"\"4\", \"hername\", \"heraddress\", \"A56-7890\""

エラーを発生させる。

% ruby openfile.rb
"set invalid charcter encoding or nil."