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."