|
IKKIさん、早速のお返事ありがとうございます。
>searchdown2 を使いましょう。
ちゃんとこういう文があるのですね。さっそく取り入れました。助かります。
>範囲選択とは別に『「選択した範囲のみ」で動作中』という状態があります。
>見た目では背景色で(*1)、マクロでは inselecting で判別できます。
>
>*1: 動作環境で [「選択した範囲のみ」で動作中の範囲を中間色で表示] を ON に
>している場合
こういう状態とそれを見るための設定もあるのですね。早速設定して自作マクロを動
かしてみました。中間色で表示された一部に検索で選択され反転表示され部分があっ
てわかりやすいです。本当にご教示ありがとうございました。
私の課題は以下のマクロでのループ解消です。
∬で始まる行で検出した数字または英大文字略語がすぐ上の
∫で始まる行にあれば、∬行の後ろに頭に刄}ークをつけて数字または英略語を書き
加えるというものです。
毎回この追加部分を含まない形で範囲選択し直しています。それは正しく選択してい
るのを確認できたのですが、やはり選択範囲を突破して1320にヒットして、ループ
しまいます。検索文をいじることなくループ解消できるでしょうか?
こんな長たらしい質問にお答えいただかなくてもかまいません。
どうしたら「動作中の範囲」をコントロールできるかわからないでいます。setsearc
h とfinddownを使ってみたらぐしゃぐしゃになってしまいました。ご興味があれば、
ご教示ください。
テキストファイル
∫@1,320行目
∬A1320行目132013201320
∫BHAAB行
∬CHAAB行
∫D1996年
∬E1996年
132013201320がループ部分です。最初はありません。
gofiletop;
while (1) {
searchdown2 "^∬.+(?=\n)",regular;
if (!result) break;
#lineno_e = lineno; #lineno_j = lineno -1;
#columnlast_e = 1;
golineend2; #columnend_e = column + 1;
movetolineno 1,#lineno_j;
golineend2; #columnend_j = column + 1;
while (1) {
movetolineno #columnlast_e,#lineno_e;
beginsel;
movetolineno #columnend_e,#lineno_e;
searchdown2
"([\\.]?[0-9][0-9,]*[\\.]?[0-9]*|[A-Z][A-Z0-9]+)"
,regular,word,inselect;
if (!result) break;
question "ループしますので 「いいえ」を選んで終了してください";
if (!result) endmacro;
$SearchKey =
gettext(seltopx,seltopy,selendx,selendy);
moveto selendx,selendy;
#columnlast_e = column + 1;
movetolineno 1,#lineno_j;
beginsel;
movetolineno #columnend_j,#lineno_j;
searchdown2 $SearchKey,fuzzy,word,inselect;
#result = result;
movetolineno 1,#lineno_e;
golineend2;
if (!#result) insert "×" + $SearchKey;
if ( #result) insert "" + $SearchKey;
}
}
endmacro;
|
|