dyno2316 ロヒミフ perl VBA Excel 秀丸

日本語

# Perl5.8 日本語扱いスクリプトの指定方法
use encoding "shift_jis"; # 標準入出力とスクリプトの文字コードが Shift-jis
use open IO => ":encoding(shift-jis)"; # 入出力ファイルの文字コードが shift-jis
binmode STDERR, ":encoding(shift-jis)"; # 標準エラーの出力文字コードを shift-jis

# 文字列リテラルの作り方1
($name, $career, $age, $memo) = split "¥n", << 'EOF';
田中一郎
プログラマ
三十五
健康一番 電話は2番
EOF

# 文字列リテラルの作り方2 ( 空白, 半角円マーク, 半角括弧 )を含まない場合のみ
 (1) @str = qw(表示 対応表 ); #最後の半角空白は必須(カッコのエスケープを防ぐため)
(2) 1つの文字列を作る時 $str = qw/百三十 /; # Perl5.6以降
#====================================================================================
# <<Shift-JIS漢字のマッチング>>
#
# 予[0x975C], 表[0x955C]など ¥5C が含まれる漢字のマッチング
# 以下の内容のファイルの各レコードについて正規表現を使った置換を行う
#
#(ファイル内容 置換前と置換後)
# 111aaaaaaaああアアアあ予定表1ああ => 111aaaaaaaああアアアあ予定表01ああ
# 222bbbbbbbいいイイイイイイ予期表2いい => 222bbbbbbbいいイイイイイイ予期表02いい
# 333cccccccううウウウcccc予告a表3うう => 333cccccccううウウウcccc予告a表03うう
# 444dddddddええエ1234567予言の表4ええ => 444dddddddええエ1234567予言の表04ええ
#--------------------------------------------------------

# Shift-JISの1,2バイト文字のパターンを定義
$char = '(?:[¥x00-¥x7F¥xA1-¥xDF]|[¥x81-¥x9F¥xE0-¥xFC][¥x40-¥x7E¥x80-¥xFC])';
# Shift-JISのリテラルは、変数に格納し、「¥」をエスケープしておく
$str_yo = quotemeta(qw/予 /);
$str_hyo = quotemeta(qw/表 /);
$str_0 = '0';
open(IN,$ARGV[0]) || die "001 can't open $ARGV[0]¥n";
while( &ltIN> )
{
$rec = $_;
# 正規表現では、文字の区切りを意識させ、ある文字の第2バイトと次の文字の第1バイトが
# 1文字であるかのようにマッチしてしまうのを避ける
$rec =‾ s/($char*?$str_yo$char*?$str_hyo)(¥d)/$1$str_0$2/;
print $rec;
}
close(IN);
#======================================================================================
(文字化けを起こすShiftJIS漢字)
0x815c — 0x835c ソ 0x845c Ы 0x875c � 0x895c 噂 0x8a5c 浬 0x8b5c 欺 0x8c5c 圭
0x8d5c 構 0x8e5c 蚕 0x8f5c 十 0x905c 申 0x915c 曾 0x925c 箪 0x935c 貼 0x945c 能
0x955c 表 0x965c 暴 0x975c 予 0x985c 禄 0x995c 兔 0x9a5c 喀 0x9b5c 媾 0x9c5c 彌
0x9d5c 拿 0x9e5c 杤 0x9f5c 歃 0xe05c 濬 0xe15c 畚 0xe25c 秉 0xe35c 綵 0xe45c 臀
0xe55c 藹 0xe65c 觸 0xe75c 軆 0xe85c 鐔 0xe95c 饅 0xea5c 鷭 0xed5c �����綉����� ""で囲むと文字化け、対処は print "表¥示";  print 'ソバ';
----------------------------------------------------