//--------------------------------------------------------------------------- // TOHANKAKU : 全角記号、英数字、ひらがな、カタカナを半角に変換する。 // [Usage] : // call TOHANKAKU $$in_str; // $$out_str = $$return; // // $$in_str : 変換する文字列 // $$out_str : 変換後の文字列 // TOHANKAKU: if( !#STR_TABLE_DEFINED ){ // 文字のテーブルを定義 // グローバル変数にして繰り返し呼び出される場合の // オーバーヘッドをなくす // 注:半角カタカタは全て文字コードで表現しています。 // control code の offset $Hankaku = " "; ##a = 0x20; while( ##a < 0xE2 ){ $Hankaku = $Hankaku + char(##a); ##a = ##a + 1; } // 半角濁音・撥音のテーブル $Hankaku_Daku = ""; ##a = 0xB6; while( ##a < 0xC5 ){ $Hankaku_Daku = $Hankaku_Daku + char(##a) + char(0xDE); ##a = ##a + 1; } $$daku = ""; $$hatsu = ""; ##a = 0xCA; while( ##a < 0xCF ){ $$daku = $$daku + char(##a) + char(0xDE); $$hatsu = $$hatsu + char(##a) + char(0xDF); ##a = ##a + 1; } $Hankaku_Daku = $Hankaku_Daku+$$daku+$$hatsu+char(0xB3)+char(0xDE); // 全角文字のテーブル $Zenkaku = "                                " + " !”#$%&’()*+,−./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_" + "‘abcdefghijklmnopqrstuvwxyz{|}〜 " + "                                " + " 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ" + "タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜" + " 。「」、・をぁぃぅぇぉゃゅょっーあいうえおかきくけこさしすせそ" + "たちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん゛゜" + "ヵヶ"; $Zenkaku_Daku_Kata = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; $Zenkaku_Daku_Hira = "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ"; // 文字テーブル定義の読み込みフラグ #STR_TABLE_DEFINED = 1; } $$r = ""; ##l = strlen( $$1 ); ##n = strlen( $Zenkaku ); ##k = strlen( $Zenkaku_Daku_Kata ); $$Z = $Zenkaku + $Zenkaku_Daku_Kata + $Zenkaku_Daku_Hira; ##a = 0; while( ##a < ##l ){ $$a = midstr( $$1, ##a, 1 ); // とりあえず1バイト分 // 半角文字なら ascii($$a)(=文字コード) は 0x20〜0xFF の範囲 if( ascii($$a) > 0xFF ){ // 全角文字だった場合の処理 $$a = midstr( $$1, ##a, 2 ); ##s = strstr( $$Z, $$a ); if( ##s != -1 ){ // 漢字以外だった場合の処理 if( ##s < ##n ) $$a = midstr( $Hankaku, ##s/2, 1 ); else if( ##s < ##n + ##k ) $$a = midstr( $Hankaku_Daku, ##s-##n, 2 ); else $$a = midstr( $Hankaku_Daku, ##s-##n-##k, 2 ); } ##a = ##a + 2; } else ##a = ##a + 1; $$r = $$r + $$a; } return $$r; //---------------------------------------------------------------------------