範囲選択内だけで実行No.04742
W.Hiroshi さん 05/06/19 12:04
 
初歩的な質問かもしれませんが。

X51.0Y-20.0
X99.0Y-14.0
X174.0
X249.0
X324.0

のようなXY座標値のXの+−を逆に書き換えるために、
以下の様なマクロを作ってみました。

−−−−−−−−−−−−−−−−−−−−−−−−−
 replaceallfast " ","";
 replaceallfast "X","X-";
 replaceallfast "X--","X";
 replaceallfast "X-0(?!\\.)","X0",regular;
endmacro;

−−−−−−−−−−−−−−−−−−−−−−−−−
これ自体は、ほぼ予想通りの動きをしていると思うのですが、これに

範囲選択してからマクロ実行した時は範囲選択範囲内のみ処理
範囲選択されていない時は全文処理
と言うのを付け加えたいのです、どうすればいいのでしょうか。

ライブラリにあるマクロなどをいろいろ見せてもらって、そういう処理をしていると
思われるマクロも見つけたのですが、他の処理と複雑に絡み合っている様にも見え、
自分の知識では、必要な処理の部分だけを取り出すことは出来ませんでした。具体的
にどういうマクロ文を書けばいいのかよく分かりません。
よろしくお願いします。

[ ]
RE:04742 範囲選択内だけで実行No.04743
h-tom さん 05/06/19 16:09
 

h-tom です。

>範囲選択してからマクロ実行した時は範囲選択範囲内のみ処理
>範囲選択されていない時は全文処理
>と言うのを付け加えたいのです、どうすればいいのでしょうか。
"replaceallfast"のオプションに、"inselect"があるので、これを指定すれば
"選択した範囲内"になります。
ただ、"replaceallfast"を実行すると選択範囲が解除されてしまうので、
次の"replaceallfast"の実行前に、再度選択しないとダメですね。

切り替えの方法としては、
・範囲選択されていれば"inselect"付き、そうでないなら"inselect"なしで実行
・範囲選択されてなければ、"selectall"ですべて選択し、全部"inselect"付き
 で実行
って所でしょうか。

[ ]
RE:04743 範囲選択内だけで実行No.04744
IKKI さん 05/06/19 17:30
 
IKKI です。こんにちは。

> ただ、"replaceallfast"を実行すると選択範囲が解除されてしまうので、
> 次の"replaceallfast"の実行前に、再度選択しないとダメですね。

これを素直に書くのは面倒ですねぇ。
自分なら replaceall を使わずに while ループでやっちゃいそうです。


if (selecting) {
 #bottom = selendy;
 moveto 1, seltopy;
 escape;
} else {
 #bottom = linecount;
 gofiletop;
}
while (1) {
 searchdown2 "(?<=X)-?(0\\.[0-9]+|[1-9][0-9.]*)", regular;
 if ((!result) || y > #bottom) break;
 escape;
 if (code == '-') {
  delete;
 } else {
  insert "-";
 }
}

[ ]
RE:04744 範囲選択内だけで実行No.04745
W.Hiroshi さん 05/06/20 11:29
 
h-tom さん、IKKI さん、こんにちは。

IKKI さん
>自分なら replaceall を使わずに while ループでやっちゃいそうです。

ありがとうございます。
作っていただいたマクロ、完璧です。
使わせてください。

[ ]