「/* */」の置換がうまくいかず困っていまNo.10930
にひら さん 02/01/11 13:58
 
こんにちは。

マクロ中での「/* */」の置換がうまくいかずに困っています。

以下1行のマクロで「/*」を「ta」に置換するテストをしてみました。
replaceallfast "/\*", "ta", regular;

すると、ファイル先頭で「ta」をいつまでも書き込み続けてしまいます。

マクロではなく、置換ダイアログでの置換ではうまくいきました。

Win95   秀丸3.08 JRE32.DLL Ver.1.17
Win2000 秀丸3.14β4 JRE32.DLL Ver.1.17

で試行しましたが結果はどちらも同じでした。

どこか私の書式に間違いがあるのでしょうか。
御教示戴けますと幸いです。

[ ]
RE:10930 「/* */」の置換がうまくいかずNo.10933
KITA さん 02/01/11 15:18
 
>replaceallfast "/\*", "ta", regular;
書式が間違ってるようですね。
C言語と同じく「"」の中では特殊記号は「\\*」と書かないと。

>マクロではなく、置換ダイアログでの置換ではうまくいきました。
マクロ記録を実行・保存して内容を見たらよく判りますよ♪

[ ]
RE:10933 「/* */」の置換がうまくいかずNo.10934
KITA さん 02/01/11 15:20
 
>C言語と同じく「"」の中では特殊記号は「\\*」と書かないと。
というか、\マークは「\\」と書く!ですね (汗)

[ ]
RE:10934 「/* */」の置換がうまくいかずNo.10935
にひら さん 02/01/11 15:41
 
KITAさん、ありがとうございました。
頭が煮詰まっていたようです。基本的な間違いでお恥ずかしい限りです。

ただ、一つ疑問なのは
replaceallfast "/\*", "ta", regular;
で無限に置換し続けてしまうのは何故かということです。「/\*」は無いはずなのに…。

無限置換にびっくりして、基本的なこと(エスケープ)を忘れてしまった馬鹿な私…。

[ ]
RE:10930 「/* */」の置換がうまくいかずNo.10939
ませま さん 02/01/11 16:24
 
にひらさんの
2002/01/11のメッセージ:
「hidesoft.2:10930| 「/* */」の置換がうまくいかず困っています」 に返信
>以下1行のマクロで「/*」を「ta」に置換するテストをしてみました。
>replaceallfast "/\*", "ta", regular;

マクロの中なら

replaceallfast "/\\*", "ta", regular;

って \ を2つにしないとダメでは?

[ ]
RE:10935 「/* */」の置換がうまくいかずNo.10942
KITA さん 02/01/11 17:57
 
>で無限に置換し続けてしまうのは何故かということです。「/\*」は無いはずなのに
>…。
「\」が来た時の内部処理でしょうねぇ。
「/\」を良くわかんない1文字として、それが0個以上ある(*)として
ヒットした・・・のかな? (つまり、何でも良い=「x*」と同じ)

[ ]
RE:10935 「/* */」の置換がうまくいかずNo.10946
える さん 02/01/11 21:42
 
>ただ、一つ疑問なのは
>replaceallfast "/\*", "ta", regular;
>で無限に置換し続けてしまうのは何故かということです。「/\*」は無いはずなのに
>…。

たぶん、秀丸は perl などと同じように無意味な \ による
エスケープを無視するようになっているのだと思います。
( これはヘルプに書いてある…かな? みてません )

"/\*" は "/*" ということになるので、

"/" の0回以上の繰り返し

となりますので、文章の先頭に必ずヒットします。
(文章の先頭は / が0個存在するので)

ですから、文章の先頭に ta が何度も挿入されることに
なるという動作になると思います。

[ ]
RE:10946 「/* */」の置換がうまくいかずNo.10958
encodingshiftjis さん 02/01/13 10:48
 
プログラム動作の可視化ぽいのを作りました
カーソルの動きを見ましょう。

// ReplaceStep.mac
$regstr=input("正規表現文字列");// /* を入力
while (result){
replacedown $regstr,"ta",regular;
menu "|"; // [ESC]  キーで終了
 }

[ ]
RE:10958 「/* */」の置換がうまくいかずNo.10967
にひら さん 02/01/13 18:56
 

 encodingshiftjisさん、replacedownによる可視化マクロありがとうございました。
カーソルの動きを確認させて戴きました。

On Sun, 13 Jan 2002 10:48:55 +0900
encodingshiftjis <51110574.xxxxxxxxxx@maruo.co.jp> wrote:

> プログラム動作の可視化ぽいのを作りました
> カーソルの動きを見ましょう。
>
> // ReplaceStep.mac
> $regstr=input("正規表現文字列");// /* を入力
> while (result){
> replacedown $regstr,"ta",regular;
> menu "|"; // [ESC]  キーで終了
>  }

[ ]