■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-3.半角カタカナを全角カタカナに変換する(Jcodeモジュール利用)

ActivePerlでJcodeモジュールを利用して、半角カタカナを全角カタカナに変換する方法です。Jcodeモジュールを初めて利用する場合は、事前にインストールする必要があります。インストール方法については、[3-6.半角全角変換]を参照してください。

Jcodeモジュールは、上記の方法で一度インストールしておけば、"use Jcode"とするだけで利用できるようになります。なお、Jcodeモジュールは入力ファイルの文字コードがeucであることを前提としていますので、必要に応じて、事前に変換しておく必要があります。なお、下記の例で、"Jcode->new($temp)->h2z->euc;"としているのは、eucで出力するという指定ですので、必要に応じて、"euc"の部分を"utf8"にすれば、utf8で、"sjis"にすれば、shift_jisで出力できるようになります。

なお、項目に含まれる半角スペースは変換されずにそのままになっている点にも注意してください。ただし、半角の「・(なかぐろ)」は全角の「・(なかぐろ)」に変換されます。

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

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

open(IN1,"input_euc.txt");  
open(OUT1,">output_euc.txt");   

use Jcode;  

while   ($line1 =   <IN1>)  {   

# CSV形式の $line1 から値を取り出して @in1 に入れる 

    chomp($line1);  
    $line1  =~  s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; 
    @in1    =   map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_}   
                ($line1 =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);    

#3番目の項目に半角カタカナがあるものとする  
    $temp   =   $in1[2];    
#カタカタのみを全角文字に変換する   
    $in1[2] =   Jcode->new($temp)->h2z->euc;    
    $out1   =   join("\t",@in1);    
    print   OUT1    "$out1\n";  

}   

close(IN1); 
close(OUT1);    
    
【スクリプトとデータのサンプル】

スクリプトはこちらにあります(必ずeucで保存してください)。

入力データはこちらにあります(必ずeucで保存してください)。

【入力データ】
"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.