演算して置換したいのですがNo.05870
Carbonaro さん 08/06/05 13:03
 
初めて質問いたします、既出でしたら申し訳ありませんがご容赦ください。

どう言う処理をしたいのかと言いますと、データ
・・・id=xxxx・・・
中の数字 xxxx を、一定数を差し引いた yyyy で置換したいのです。
(注 yyyy=xxxx-const) 。

id=xxxxの部分は検索文字列を id=[0-9]+ などとすれば検索できるのですが、各時点
で [0-9]+ として何を検索したのか取り出す方法が見つけられなかったのです。

ネットに例があったので、「=」の先を一カラムずつ探って、数字かどうかを調べ、
数字のカラム範囲がわかった時点で gettext でxxxxを取り出し、数字に変換して一
定値を差し引く演算をした後文字化し、 id=yyyy と言う文字列で上書き置換してい
ます。

本当にこんな方法しかないのでしょうか?

それから、
searchdown $SearchString , regular, nocasesense;
として検索しているのですが、
escape;
としても、本来は数字の部分だけを場所を指定して上書きできると思うのですがまま
ならず、最後までこの検索に付き合って、id=の部分付きで上書きするはめになりま
した。

やり方が間違っているのではないかと思っております。

宜しくお願い致します。


[ ]
RE:05870 演算して置換したいのですがNo.05871
IKKI さん 08/06/05 13:50
 
こんにちは。ユーザーの IKKI と申します。

こんなマクロで目的は達せるのではないでしょうか。

setcompatiblemode 0x0200;
#const = 123;
escape;
searchdown "(?<=id=)[0-9]+", regular, nocasesense;
// この時点で "id=" に続く数字列が範囲選択されている
if (!result) endmacro;
##oldval = val(gettext(foundtopx, foundtopy, foundendx, foundendy, true));
// gettext() の第5引数を true にすることで範囲選択を維持する
##newval = ##oldval - #const;
// 数字列が範囲選択されているので insert で置き換えられる
insert str(##newval);

[ ]
RE:05871 演算して置換したいのですがNo.05872
Carbonaro さん 08/06/05 14:49
 
IKKI様、即レスありがとうございました、動作確認もOKでした。

foundtopxとかfoundendxを見落としていると言うご指摘ですね。

(?<= は前方一致ですか、今まで目にしてはいたのですが、こう云う使い方をするの
ですか・・・。

非常に勉強になりました、ありがとうございました。


[ ]