括弧内の文字を抜き取り連番にするNo.05599
powan さん 07/07/23 08:16
 
過去ログのマクロを拝借しその関連で自分が過去に質問しお答え頂いたマクロとくっつけて
以下のようなことができるマクロを作りたいのですが、どうもうまくいかないので、質
問します。


例題で【 】内の文字を抜き取り、連番にして@が出てくると連番が1に戻るというも
のです。また、抜き取った答えの前に( )内に選択肢と同じ連番が入るようにした
いです。
----------------------------
例題「【むかしむかし】ある所に【おじいさん】と【おばあさん】が住んでいました。
@【おじいさん】は【山に】しばかりに、@おばあさんは【川に】せんたくに【行きま
した】。」
----------------------------
これを
----------------------------
 「【1】ある所に【2】と【3】が住んでいました。@【1】は【2】しばかりに、@お
ばあさんは【1】せんたくに【2】。」

(1)むかしむかし
(2)おじいさん
(3)おばあさん
(1)おじいさん
(2)山に
(1)川に
(2)行きました
----------------------------
としたいのです。
下のは、こちらでお借りした2つのマクロを合体させたみたのですがうまくいきません。
なお下のマクロを実行するとクリックするとダイアログが出て止めれますがエンドレスになりま
す。
思いとおりに動かすにはマクロをどうすればいいでしょうか?宜しくお願いいたします。

//----------------------------------------------//
//Macro2
call Change_search;
$k1= "【";
$k2= "】";
$ps = "【";
$rs = "】";
$s="@";
disabledraw;
if( selecting ) {
    #sel = 1;
    #handle1 = hidemaruhandle(0);
    cut;
    openfile "/h";
    #handle2 = hidemaruhandle(0);
    paste;
}
gofiletop;
#i = 1;
while( 1 ) {
searchdown2 $k1 + "[^" + $k2 + "]+" + $k2+"|"+ $s, regular;
if( !result ) break;
if(gettext( foundtopx, foundtopy, foundendx, foundendy ) == "@" ) {
#i = 1;
right;
} else {
cut;
insert  $ps + str(#i) + $rs ;
#i = #i + 1;
}
}
gofileend;
insert "\n";
while( #i > 1 ) {
    insert "\n";
    up;
insert "("+str(#i)+")";
poppaste;
  golinetop;
    delete;
    golineend;
    backspace;
    golinetop;
    #i = #i - 1;
}
if( #sel ) {
    gofileend;
    insert "\n";
    selectall;
    copy;
    setactivehidemaru #handle1;
    paste;
    closehidemaruforced #handle2;
}
call Reset_search;
endmacro;

Change_search:    //検索状態を変更
if ( !searchmode ) {     // 検索状態を範囲選択に変更
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound", 1;
    #modechanged = 1;
    envchanged;
}
#searchoption = searchoption;
$searchbuffer = searchbuffer;
return;

Reset_search:   //検索状態を元に戻す
if ( #modechanged ) {
    writeregnum "SelectFound", 0;
    envchanged;
    closereg;
}
setsearch $searchbuffer, #searchoption;
return;
//-----------------------------------------------------//

[ ]
RE:05599 括弧内の文字を抜き取り連番にすNo.05600
K'zawa さん 07/07/23 14:49
 
powanさん、こんにちは。
K'zawa/ユーザーです。

>思いとおりに動かすにはマクロをどうすればいいでしょうか?宜しくお願いいたしま
>す。

とにかく動くようにしてみました。
途中で改行していると、取りこぼしてしまいますが…。

// 秀丸エディタV5.00以上
$k1= "【";
$k2= "】";
$ps = "【";
$rs = "】";
$s="@";
if( version < 500 ) {
    message "秀丸エディタV5.00未満ではダメ!";
    endmacro;
}
call Change_search;
if( selecting ) {
    #sel = 1;
    #handle1 = hidemaruhandle(0);
    copy2;
    openfile "/h";
    #handle2 = hidemaruhandle(0);
    paste;
}
disabledraw;
setclipboard "\x0A";
gofiletop;
#i = 1;
while( 1 ) {
    searchdown2 $k1 + "[^" + $k2 + "]+" + $k2 + "|" + $s, regular;
    if( !result ) break;
    $found=gettext( foundtopx, foundtopy, foundendx, foundendy, 1 );
    if($found == $s ) {
        #i = 1;
        right;
        addclipboard "\x0A";
    } else {
        delete;
        insert  $ps + str(#i) + $rs ;
        addclipboard "("+str(#i)+")"+$found+"\x0A";
        #i = #i + 1;
        #r = #r + 1;
    }
}
if( #r ) {
    gofileend;
    #x=x; #y=y;
    paste;
    moveto #x,#y;
    while( 1 ) {
        replacedown $k1 + "|" + $k2 , "" , regular;
        if( ! result ) break;
    }
}
if( #sel ) {
    if( #r ) {
        selectall;
        copy;
        setactivehidemaru #handle1;
        paste;
    } else {
        setactivehidemaru #handle1;
        escape;
    }
    closehidemaruforced #handle2;
}
call Reset_search;
endmacro;

Change_search:  //検索状態を変更
if ( !searchmode ) {     // 検索状態を範囲選択に変更
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound", 1;
    #modechanged = 1;
    envchanged;
}
#searchoption = searchoption;
$searchbuffer = searchbuffer;
return;

Reset_search:   //検索状態を元に戻す
if ( #modechanged ) {
    writeregnum "SelectFound", 0;
    envchanged;
    closereg;
}
setsearch $searchbuffer, #searchoption;
return;
//-----------------------------------------------------//

[ ]
RE:05600 括弧内の文字を抜き取り連番にすNo.05601
powan さん 07/07/24 03:54
 
K'zawaさん。早速ご回答頂きありがとうござます。
マクロを実行したところ思い通りの結果がでました。
これで、作業が大変楽になりそうです。

>途中で改行していると、取りこぼしてしまいますが…。
途中で改行してる箇所はないので問題なしです。

ありがとうざいました。


[ ]
RE:05601 括弧内の文字を抜き取り連番にすNo.05602
K'zawa さん 07/07/24 09:54
 
powanさん、こんにちは。
K'zawaです。

>K'zawaさん。早速ご回答頂きありがとうござます。
>マクロを実行したところ思い通りの結果がでました。
>これで、作業が大変楽になりそうです。

ちゃんと動いてよかったです。
どうでもいい話ですが、

if( version < 500 ) {
    message "秀丸エディタV5.00未満ではダメ!";
    endmacro;
}

を、同じマクロ内に書いても無駄でした。
消してください。

[ ]
RE:05602 括弧内の文字を抜き取り連番にすNo.05603
powan さん 07/07/24 20:53
 
K'zawaさん。お世話になります。

>if( version < 500 ) {
>    message "秀丸エディタV5.00未満ではダメ!";
>    endmacro;
>}
>
>を、同じマクロ内に書いても無駄でした。
>消してください。
了解いたしました。削除します。
また機会がありましたらどうぞ宜しくお願いいたします。

powan

[ ]