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

■ナビゲータ

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

  1. [Windows版Rubyの細道・けもの道]
    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.半角英数字を全角英数字に変換する(jcodeライブラリ利用)]
        2. [3-6-2.半角カタカナを全角カタカナに変換する(nkfライブラリ利用)]
        3. [3-6-3.全角の英数字・記号を半角の英数字・記号に変換する(nkfライブラリ利用)]
        4. [3-6-4.全角文字を半角文字に変換する]
      7. [3-7.多次元配列の処理]
      8. [3-9.その他]
    4. [スクリプトと入力データのサンプル]
Perlではどう処理する?
同じことをPerlではこうしています。

3.応用編

3-6.半角全角変換

3-6-1.半角英数字を全角英数字に変換する(jcodeライブラリ利用)

jcodeライブラリを使って、文字コードを変換する方法です。ruby1.9以降は、jcodeライブラリがなくなっているため、ruby1.8以前でしか実行できません。

半角の英数字を全角の英数字にするには、tr('0-9a-zA-Z', '0-9a-zA-Z')とします。また、逆に全角の英数字を半角の英数字にするには、tr('0-9a-zA-Z', '0-9a-zA-Z')とします。

また、スクリプト・入力ファイルの文字コード・$KCODEの値は同じ内容にします。なお、$KCODEには 'shift_jis'、'euc-jp'、'utf-8'の3つのうちのどれか1つだけが設定できます。

実際に応用する場合は、入出力データのファイル名等を変更して、利用します。

【スクリプト】
# jcode_conv.rb 
# 内容 : jcodeライブラリを利用して半角英数字を全角英数字に変換する。    
#        また、全角英数字を半角英数字に変換する。   
# 前提 : ruby1.8まで可能(ruby1.9以降はjcodeライブラリがないため不可)    
# Copyright (c) 2011-2015 Mitsuo Minagawa, All rights reserved. 
# (minagawa@fb3.so-net.ne.jp)   
# 使用方法 : c:\>ruby jcode_conv.rb 
#   
$KCODE  =   'shift_jis' #他はeuc-jpまたはutf-8のみ  
require 'jcode' 

# 入力ファイル  
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]  =   in1[2].tr('0-9a-zA-Z', '0-9a-zA-Z')   
# 全角英数字を半角英数字に変換する  
    in1[2]  =   in1[2].tr('0-9a-zA-Z', '0-9a-zA-Z')   
    out1    =   in1.join("\t")  
    out1_file.print out1,"\n"   

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 ジョン・スミス  
    
【出力データ(全角英数字を半角英数字に変換したとき)】
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-2015 Mitsuo Minagawa, All rights reserved.