ActivePerlではなく、shift_jisで半角カタカナの処理ができるようにしてあるJPerl.exeという別種のPerlを使って処理する方法です。
パターンマッチ処理によって、1文字ずつ変換していきます。項目に含まれる半角スペースは全角スペースになっている点に注意してください。
実際に応用する場合は、入出力データのファイル名等を変更するとともに、半角カナ文字がある項目(下記では3番目の項目にしている)を指定して、利用します。
# h2zkana1.pl # 内容 : 半角カナを全角カナに変換する # 前提 : 入力ファイルはshift-jis、スクリプトはshift-jisとすること # 「JPerl」でのみ動作可能(通常のperlでは動作不可) # Copyright (c) 2011 Mitsuo Minagawa, All rights reserved. # (minagawa@fb3.so-net.ne.jp) # 使用方法 : c:\>jperl h2zkana1.pl # open(IN1,"input_sjis.txt"); open(OUT1,">output_sjis.txt"); $dakuten = 1; $handaku = 2; while ($line1 = <IN1>) { chomp($line1); $line1 =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @in1 = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($line1 =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); $temp = $in1[2]; # # 半角スペースは全角スペースにする。 # $temp =~ s/ / /g; # # 半角を全角にする。 # $temp =~ tr/\xA1-\xDF/。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜/; # # 濁音の処理 # $temp =~ s/([カキクケコサシスセソタチツテトハヒフヘホ])゛/pack("n",unpack("n",$1)+$dakuten)/ge; # # 半濁音の処理 # $temp =~ s/([ハヒフヘホ])゜/pack("n",unpack("n",$1)+$handaku)/ge; # # ヴ の処理 # $temp =~ s/ウ゛/ヴ/g; # # 出力 # $in1[2] = $temp; $out1 = join("\t",@in1); print OUT1 "$out1\n"; } close(IN1); close(OUT1);
スクリプトを実行するのに、最低限必要なJPerl.exeはこちらにあります。
このスクリプトを動作させるために最低限必要なJPerlを上記からダウンロードした上で、zipファイルを解凍し、JPerl.exeと同じフォルダに入力ファイルとスクリプトを入れた上で実行してください。
スクリプトはこちらにあります(必ず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 ジョン・スミス