replaceallの動作不具合No.04766
YUSA さん 05/06/26 00:39
 
2001/9頃、ベクターにアップした置換マクロ(PC-9801外字→DOS/V外字)を、改訂の
ためVer4.17で動作確認を取ろうとしたところ、不具合を生じています。eb9f以降のP
C-9801外字コード部を、処理開始後、かつ置換前に全部8145で認識してしまい、8145
←→f040の置換になっているように思えます。回避方法はあるのでしょうか。

マクロ2種(実際にはeb9fからebdfまでの64行分です)
//macro3.mac
replaceallfast "・","@"; //eb9f→f040
replaceallfast "・","A"; //eba0→f041
replaceallfast "・","B"; //eba1→f042

//macro4.mac
replaceallfast  "@","・"; //f040→eb9f
replaceallfast  "A","・"; //f041→eba0
replaceallfast  "B","・"; //f042→eba1

以下、処理結果
//macro3をmacro3で処理
replaceallfast "@","@"; //eb9f→f040
replaceallfast "@","A"; //eba0→f040
replaceallfast "@","B"; //eba1→f040

//macro3をmacro4で処理
replaceallfast "・","・"; //すべてが8145
replaceallfast "・","・"; //すべてが8145
replaceallfast "・","・"; //すべてが8145

//macro4をmacro3で処理
replaceallfast  "@","@"; //eb9f→f040
replaceallfast  "A","@"; //eba0→f040
replaceallfast  "B","@"; //eba1→f040

//macro4をmacro4で処理
replaceallfast  "・","・"; //すべてが8145
replaceallfast  "・","・"; //すべてが8145
replaceallfast  "・","・"; //すべてが8145

[ ]
RE:04766 replaceallの動作不具合No.04767
YUSA さん 05/06/26 00:48
 
すみません、動作環境が抜けていました。Windows XP Home SP2、秀丸4.17です。マ
シンはNEC LaVieです。

[ ]
RE:04767 replaceallの動作不具合No.04768
山紫水明 さん 05/06/26 10:10
 
 YUSAさん,こんにちは。

>C-9801外字コード部を、処理開始後、かつ置換前に全部8145で認識してしまい、
>8145←→f040の置換になっているように思えます。回避方法はあるのでしょうか。

>replaceallfast "・","@"; //eb9f→f040

 うまくいくかどうか確信はありませんが,一度

replaceallfast "\\xeb\\x9f","\\xf0\\x40", regular;

のような書き方でで試してみたらいかがでしょう。

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:04768 replaceallの動作不具合No.04769
でるもんた さん 05/06/26 10:51
 
でるもんたです。

> C-9801外字コード部を、処理開始後、かつ置換前に全部8145で認識してしまい、
> >8145←→f040の置換になっているように思えます。回避方法はあるのでしょうか。
>
> >replaceallfast "・","(セ"; //eb9f→f040
>
>  うまくいくかどうか確信はありませんが,一度
> replaceallfast "\\xeb\\x9f","\\xf0\\x40", regular;
> のような書き方でで試してみたらいかがでしょう。

以前に私も同様の質問をしたことがありました。
(そのときはたしか強調表示がらみだったかと。)

途中で Unicode への変換・逆変換を挟むとのことで、マッピングテーブルが
1対多になっている文字はオールアウトです。\xNN で指定すればOKです。

[ ]
RE:04769 replaceallの動作不具合No.04770
YUSA さん 05/06/26 15:01
 
山紫水明さん、でるもんたさん、コメントありがとうございます。

>途中で Unicode への変換・逆変換を挟むとのことで、マッピングテーブルが
>1対多になっている文字はオールアウトです。\xNN で指定すればOKです。

パラメータ文字列を16進コード表記に変更 → この方法で正常に置換できました。
ありがとうございました。

//New3.mac
replaceallfast "\\xeb\\x9f","\\xf0\\x40", regular;
replaceallfast "\\xeb\\xa0","\\xf0\\x41", regular;
replaceallfast "\\xeb\\xa1","\\xf0\\x42", regular;

//New4.mac
replaceallfast "\\xf0\\x40", "\\xeb\\x9f", regular;
replaceallfast "\\xf0\\x41", "\\xeb\\xa0", regular;
replaceallfast "\\xf0\\x42", "\\xeb\\xa1", regular;


[ ]