範囲指定の置換えNo.24866
スーパーT さん 08/05/06 06:10
 
いつも大変お世話になります。

マクロで置き換えを行いたいのですが
範囲指定がうまくできません。

文字列があります。(ちょっと醜くてすいません。)
aaaaxaaabaaayaaacaazaaabaaa

1.範囲指定内の文字列を置き換えする。
xとyで囲まれた範囲内のbをdに置き換えたい。
aaaaxaaabaaayaaacaazaaabaaa
  ↓
aaaaxaaadaaayaaacaazaaabaaa

2.範囲指定外の文字列を置き換えする。
xとyで囲まれた範囲外のbをdに置き換えたい。
aaaaxaaabaaayaaacaazaaabaaa
  ↓
aaaaxaaabaaayaaacaazaaadaaa

この様な置き換えは可能でしょうか?
いつもお世話になります。
よろしくお願いいたします。



[ ]
RE:24866 範囲指定の置換えNo.24867
山紫水明 さん 08/05/06 08:48
 
 スーパーTさん,

とりあえず考えてみました。
条件によってはうまくいかない場合があるかも知れませんが。

>1.範囲指定内の文字列を置き換えする。
>xとyで囲まれた範囲内のbをdに置き換えたい。

//--------------------------------------------//
setcompatiblemode 0x0200;//検索表示を範囲選択
disabledraw;
gofiletop;
while( 1 ) {
    searchdown2 "x.+?y", regular;
    if( !result ) break;
    #x = x; #y = y;
    cut;
    gofileend;
    insert "\n";
    #bx = x; #by = y;
    paste;
    insert "\n";
    moveto #bx, #by;
    selectline;
    replaceall "b", "d", inselect;
    selectline;
    cut;
    backspace;
    moveto #x, #y;
    paste;
    backspace;
}
endmacro;
//--------------------------------------------//

>2.範囲指定外の文字列を置き換えする。
>xとyで囲まれた範囲外のbをdに置き換えたい。

//--------------------------------------------//
setcompatiblemode 0x0200;
disabledraw;
gofiletop;
while( 1 ) {
    searchdown2 "x.+?y", regular;
    if( !result ) break;
    #x = x; #y = y;
    cut;
    selectline;
    replaceall "b", "d", inselect;
    moveto #x, #y;
    paste;
}
endmacro;
//--------------------------------------------//

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

[ ]
RE:24867 範囲指定の置換えNo.24868
山紫水明 さん 08/05/06 11:23
 
 スーパーTさん,

追伸です。置換だけでもやれるかも知れません。
前者は
    replaceallfast "(x.*?)(b)(.*?y)", "\\1d\\3", regular;
   
もし b が複数回出てくるようでしたら,

while( 1 ) {
    replaceallfast "(x.*?)(b)(.*?y)", "\\1d\\3", regular;
    if( !result ) break;
}

とすればどうでしょう。

後者は多分,
    replaceallfast "(b)(.*?x.+?y)", "d\\2", regular;
    replaceallfast "(x.+?y.*?)(b)", "\\1d", regular;
と2行になるでしょう。これも複数回出てくるようでしたら,前者と同じ処理
になります。

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

[ ]
RE:24868 範囲指定の置換えNo.24869
スーパーT さん 08/05/06 13:56
 
山紫水明 様

いつも教えていただきましてありがとうございます。
大変感謝しております。
ありがとうございます。

>while( 1 ) {
>    replaceallfast "(x.*?)(b)(.*?y)", "\\1d\\3", regular;
>    if( !result ) break;
>}
>

で実行できました。

今後ともよろしくお願いいたします。


[ ]