nkfライブラリを使って、半角カタカナを全角カタカナに変換する方法です。nkfライブラリでは、半角カタカナを全角カタカナに変換しない-xオプションをつけないと自動的に半角カタカナを全角カタカナに変換しますので、入力ファイルや出力ファイルの文字コードと他に必要なオプションをつければ、全角カタカナに変換できるようになります(nkfライブラリのオプションについては、[3-5-2.文字コードの変換(nkfライブラリ利用)]で解説しています)。また、-Z0オプションをつけると、全角の英数字と記号を半角に変換します。
実際に応用する場合は、入出力データのファイル名やnkfライブラリのオプション等を変更して、利用します。
# h2zkana2.rb # 内容 : 入力コード(エンコード)変換と半角カタカナを全角カタカナに変換する。 # 全角の英数字と記号を半角に変換する。 # Copyright (c) 2011-2015 Mitsuo Minagawa, All rights reserved. # (minagawa@fb3.so-net.ne.jp) # 使用方法 : c:\>ruby h2zkana2.rb # require 'nkf' # 入力ファイル 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] = NKF::nkf( '-SsZ0', in1[2] ) out1 = in1.join("\t") #タブで項目をまとめる。 out1_file.print out1,"\n" #1行出力する。 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 ジョン・スミス