■Windows版Perlの細道・けもの道

■ナビゲータ

[南北館(最初のメニュー)]

  1. [Windows版Perlの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
    3. [3.応用編]
      1. [3-1.固定長データとCSVデータとの変換]
      2. [3-2.重複データの処理]
      3. [3-3.フォルダ内の一括処理]
      4. [3-4.1つのファイルを複数のファイルに分割する]
      5. [3-5.文字コードの変換]
      6. [3-6.半角全角変換]
        1. [3-6-1.半角カタカナを全角カタカナに変換する(JPerl.exe利用)]
        2. [3-6-2.半角カタカナを全角カタカナに変換する(Encodeモジュール利用)]
        3. [3-6-3.半角カタカナを全角カタカナに変換する(Jcodeモジュール利用)]
        4. [3-6-4.半角文字を全角文字に変換する(Unicodeモジュール利用)]
        5. [3-6-5.全角カタカナを半角カタカナに変換する(JPerl.exe利用)]
        6. [3-6-6.全角カタカナを半角カタカナに変換する(Encodeモジュール利用)]
        7. [3-6-7.全角カタカナを半角カタカナに変換する(Jcodeモジュール利用)]
        8. [3-6-8.全角文字を半角文字に変換する(Unicodeモジュール利用)]
      7. [3-7.多次元配列の処理]
      8. [3-9.その他]
    4. [スクリプトと入力データのサンプル]
rubyではどう処理する?
同じことをrubyではこうしています。

3.応用編

3-6.半角全角変換

3-6-1.半角カタカナを全角カタカナに変換する(JPerl.exe利用)

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.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 ジョン・スミス
    



Copyright (c) 2011-2013 Mitsuo Minagawa, All rights reserved.