jcodeライブラリを使って、文字コードを変換する方法です。ruby1.9以降は、jcodeライブラリがなくなっているため、ruby1.8以前でしか実行できません。
半角の英数字を全角の英数字にするには、tr('0-9a-zA-Z', '0-9a-zA-Z')とします。また、逆に全角の英数字を半角の英数字にするには、tr('0-9a-zA-Z', '0-9a-zA-Z')とします。
また、スクリプト・入力ファイルの文字コード・$KCODEの値は同じ内容にします。なお、$KCODEには 'shift_jis'、'euc-jp'、'utf-8'の3つのうちのどれか1つだけが設定できます。
実際に応用する場合は、入出力データのファイル名等を変更して、利用します。
# jcode_conv.rb
# 内容 : jcodeライブラリを利用して半角英数字を全角英数字に変換する。
# また、全角英数字を半角英数字に変換する。
# 前提 : ruby1.8まで可能(ruby1.9以降はjcodeライブラリがないため不可)
# Copyright (c) 2011-2015 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)
# 使用方法 : c:\>ruby jcode_conv.rb
#
$KCODE = 'shift_jis' #他はeuc-jpまたはutf-8のみ
require 'jcode'
# 入力ファイル
in1_file = open("input_sjis.txt","r")
# 出力ファイル
out1_file = open("output_sjis.txt","w")
# 主処理
while (line1 = in1_file.gets)
line1.chomp!
#タブ区切りのとき
# in1 = line1.split("\t",-1)
#カンマ区切りのとき
in1 = (line1 + ',')
.scan(/"([^"\\]*(?:\\.[^"\\]*)*)",|([^,]*),/)
.collect{|x,y| y || x.gsub(/(.)/, '\1')}
# 半角英数字を全角英数字に変換する
# in1[2] = in1[2].tr('0-9a-zA-Z', '0-9a-zA-Z')
# 全角英数字を半角英数字に変換する
in1[2] = in1[2].tr('0-9a-zA-Z', '0-9a-zA-Z')
out1 = in1.join("\t")
out1_file.print out1,"\n"
end
# ファイルのクローズ
in1_file.close
out1_file.close
スクリプトはこちらにあります(必ずshift_jisで保存してください)。
入力データはこちらにあります(必ずshift_jisで保存してください)。
"0100","ABC","[]@!#$%&<>'()*+,-./ 012345ABCEFGabcefgアイウエオガザダバパヴ"
"0110","ABC","[]@!#$%&<>'()*+,-./ "
"0120","ABC","0123456789"
"0130","ABC","ABCEFGabcefg"
"0140","ABC","アイウエオガザダバパヴ"
"0150","ABC","カガ タダヒコ"
"0160","ABC","スズキ ココロ"
"0170","ABC","ジョン・スミス"
"0200","DEF","[]@!#$%&<>'()*+,−./012345ABCDEFGabcdefgアイウエオガザダバパヴ"
"0210","DEF","[]@!#$%&<>'()*+,−./ "
"0220","DEF","0123456789"
"0230","DEF","ABCDEFGabcdefg"
"0240","DEF","アイウエオガザダバパヴ"
"0250","DEF","カガ タダヒコ"
"0260","DEF","スズキ ココロ"
"0270","DEF","ジョン・スミス"
0100 ABC []@!#$%&<>'()*+,-./ 012345ABCEFGabcefgアイウエオガザダバパヴ
0110 ABC []@!#$%&<>'()*+,-./
0120 ABC 0123456789
0130 ABC ABCEFGabcefg
0140 ABC アイウエオガザダバパヴ
0150 ABC カガ タダヒコ
0160 ABC スズキ ココロ
0170 ABC ジョン・スミス
0200 DEF []@!#$%&<>'()*+,−./012345ABCDEFGabcdefgアイウエオガザダバパヴ
0210 DEF []@!#$%&<>'()*+,−./
0220 DEF 0123456789
0230 DEF ABCDEFGabcdefg
0240 DEF アイウエオガザダバパヴ
0250 DEF カガ タダヒコ
0260 DEF スズキ ココロ
0270 DEF ジョン・スミス
0100 ABC []@!#$%&<>'()*+,-./ 012345ABCEFGabcefgアイウエオガザダバパヴ
0110 ABC []@!#$%&<>'()*+,-./
0120 ABC 0123456789
0130 ABC ABCEFGabcefg
0140 ABC アイウエオガザダバパヴ
0150 ABC カガ タダヒコ
0160 ABC スズキ ココロ
0170 ABC ジョン・スミス
0200 DEF []@!#$%&<>'()*+,−./012345ABCDEFGabcdefgアイウエオガザダバパヴ
0210 DEF []@!#$%&<>'()*+,−./
0220 DEF 0123456789
0230 DEF ABCDEFGabcdefg
0240 DEF アイウエオガザダバパヴ
0250 DEF カガ タダヒコ
0260 DEF スズキ ココロ
0270 DEF ジョン・スミス