« Perl - base64形式(エンコード/デコード)のサンプル | トップページ | 64bit対応のCygwinセットアップとTeratermの設定 »

2012/05/23

Perl - 全角カナ⇔半角カナ 変換のサンプル

テストデータは、プログラムの後につけているので kana.txt ファイルとして利用できる。

#------------------------------------------------
# 全角カナ⇔半角カナ 変換のサンプル
#------------------------------------------------

use strict;          # 不適切な構文の使用を制限するプラグマ
use warnings;        # 不適切な構文を警告するプラグマ

use Encode;
use Encode::JP::H2Z;

require("lib_file.pl");  # ライブラリファイル取り込み

#------------------------
# サブルーチン宣言
#------------------------
sub test_kana();
sub kana_z2h($);
sub kana_h2z($);

# 全角カナ⇔半角カナのテストサンプル実行
test_kana();

#-----------------------------
# 全角カナ⇔半角カナのテストサンプル
#-----------------------------
sub test_kana()
{
    my $in_file;
    my $out_z2h;
    my $out_h2z;
    my $in_fh;
    my $z2h_fh;
    my $h2z_fh;
    my $read_data;
    my $kana_data;

    $in_file = 'kana.txt';         # 全半角カナ混在テキスト
    $out_z2h = 'kana_z2h.txt';     # 半角カナ変換後出力ファイル
    $out_h2z = 'kana_h2z.txt';     # 全角カナ変換後出力ファイル

    # 全半角カナ混在テキストオープン
    if( !open($in_fh, '<', $in_file))
    {
        logout("perl_log", qq/Can't open file "$in_file": $!/);
        exit(-1);
    }

    # 半角カナ変換後出力ファイルオープン
    if( !open($z2h_fh, '>', $out_z2h))
    {
        logout("perl_log", qq/Can't open file "$out_z2h": $!/);
        exit(-1);
    }

    # 全角カナ変換後出力ファイルオープン
    if( !open($h2z_fh, '>', $out_h2z))
    {
        logout("perl_log", qq/Can't open file "$out_h2z": $!/);
        exit(-1);
    }

    # 全半角カナ混在テキストを読出し半角/全角カナ変換後
    # 出力ファイルを作成する
    while( $read_data = <$in_fh> )
    {
        chomp($read_data);             # 末尾の改行削除

        # 全角カナ → 半角カナ変換
        $kana_data = kana_z2h($read_data);

        # 半角カナ変換後出力ファイルへ出力
        print($z2h_fh $kana_data, "\n");

        # 半角カナ → 全角カナ変換
        $kana_data = kana_h2z($read_data);

        # 全角カナ変換後出力ファイルへ出力
        print($h2z_fh $kana_data, "\n");
    }

    # オープンしたファイルをクローズ
    close($in_fh);
    close($z2h_fh);
    close($h2z_fh);
}

#------------------------------------------------
# 全角カナ → 半角カナ変換
#------------------------------------------------
sub kana_z2h($)
{
    my $str;

    $str = shift;

    Encode::from_to($str, "utf8", "euc-jp");
    Encode::JP::H2Z::z2h(\$str);
    Encode::from_to($str, "euc-jp", "utf8");

    return($str);
}

#------------------------------------------------
# 半角カナ → 全角カナ変換
#------------------------------------------------
sub kana_h2z($)
{
    my $str;

    $str = shift;

    Encode::from_to($str, "utf8", "euc-jp");
    Encode::JP::H2Z::h2z(\$str);
    Encode::from_to($str, "euc-jp", "utf8");

    return($str);
}

#------------------------------------------------
# END
#------------------------------------------------

#------------------------------------------------
# 全角カナ⇔半角カナ TEST DATA

#------------------------------------------------

■全角カナ一覧
ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ
タダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポ
マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ

■半角カナ一覧
アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッー゙゚。「」、・

●半角英数/記号
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
^_`abcdefghijklmnopqrstuvwxyz{|}~

●全角ひらがな
ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞ
ただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽ
まみむめもゃやゅゆょよらりるれろゎわゐゑをん

●全角英数
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789

#------------------------------------------------
# TEST DATA END
#------------------------------------------------

« Perl - base64形式(エンコード/デコード)のサンプル | トップページ | 64bit対応のCygwinセットアップとTeratermの設定 »

Perl実用プログラムサンプル」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Perl - 全角カナ⇔半角カナ 変換のサンプル:

« Perl - base64形式(エンコード/デコード)のサンプル | トップページ | 64bit対応のCygwinセットアップとTeratermの設定 »