■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-5.全角カタカナを半角カタカナに変換する(JPerl.exe利用)

ActivePerlではなく、shift_jisで半角カタカナの処理ができるようにしてあるJPerl.exeという別種のPerlを使って処理する方法です。

パターンマッチ処理によって、1文字ずつ変換していきます。項目に含まれる全角スペースは半角スペースになっている点に注意してください。

実際に応用する場合は、入出力データのファイル名等を変更するとともに、半角カナ文字がある項目(下記では3番目の項目にしている)を指定して、利用します。

【スクリプト】
# z2hkana1.pl   
# 内容 : 全角カナを半角カナに変換する   
# 前提 : 入力ファイルはshift-jis、スクリプトはshift-jisとすること   
#        「JPerl」でのみ動作可能(通常のperlでは動作不可)    
# Copyright (c) 2011 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)  
# 使用方法 : c:\>jperl z2hkana1.pl  
#   

open(IN1,"input_sjis.txt"); 
open(OUT1,">output_sjis.txt");  

while   ($line1 =   <IN1>)  {   
        chomp($line1);  
        $line1  =~  s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; 
        @in1    =   map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_}   
                    ($line1 =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);    
        $temp   =   $in1[2];    
#   
# 濁音の処理    
#   
    $temp   =~  s/([ガギグゲゴザジズゼゾダヂヅデドバビブベボ])
	             /pack("n",unpack("n",$1) - 1)."゛"/ge;    
#   
# 半濁音の処理  
#   
    $temp   =~  s/([パピプペポ])/pack("n",unpack("n",$1) - 2)."゜"/ge;  
#   
# ヴ の処理 
#   
    $temp   =~  s/ヴ/ウ゛/g;    
#   
# 全角を半角に  
#   
    $temp   =~  tr/。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ
                   タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜/\xA1-\xDF/;   
#   
# 全角スペースは半角スペースに  
#   
    $temp   =~  s/ / /g;   
#   
# 出力  
#   
    $in1[2] =   $temp;  
    $line1  =   join("\t",@in1);    
    print OUT1  "$line1\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.