検索個所の数値を取得する??No.00925
TORA さん 99/12/29 11:18
 
TORAです。
入会と同時に「教えて、教えて」が無作法だということは
重々わかっているつもりなのですが、あまりにも
時間がないため、どうかお許しください。

現在スクリプトを制作しております。
このスクリプトの仕様というのは、
:00100
から100単位でラベルが増分していくのです。
で、僕が思うのには、いちいちラベルナンバーを
打たなくても、
マクロを実行すると、

上方向に検索をかけて、頭に:のついた行をさがす
(:はラベル行の冒頭にしか絶対についていません)
見つかった行の左端2文字目から6文字目までを
数字として取り込む

その価に100を足して、再び元の位置にカーソルを戻し、
頭に:をつけて価を表示する

というふうにやればいいかな、と思っています。

しかし、searchupで:をみつけても、その行に
カーソルが移るわけではないのですね。

最初のカーソル位置を記憶させておいて、
searchupで発見した行にカーソルを移動させ、
数値を取り込み、
もとの場所に帰るというやりかたがわかりません。
(ヘルプを2時間読んで挫折しました)
どなたかお助けを…

もしくは、もっと簡単なやりかたをご存知の方、
どうぞお教えください。

それと、現在も手に入る秀丸の参考書をご存知でしたら
お教えいただけませんか?

[ ]
RE:00925 検索個所の数値を取得する??No.00926
プックン さん 99/12/29 12:54
 
はじめましてTORAさん


>最初のカーソル位置を記憶させておいて、
カーソル行をX,Y座標で記憶すればいいとおもいます。
秀丸マクロhelpより
x:カーソルのx座標を表します。カーソルが一番左にいる時が0です。
y:カーソルのy座標を表します。y座標は、現在編集中のテキストの先頭行からワー
  プロ的に行番号を計算した値で、一番上にいる時が0です。

>searchupで発見した行にカーソルを移動させ、
>数値を取り込み、
>もとの場所に帰るというやりかたがわかりません。
movetoで移動する。
秀丸マクロhelpより
movetoコマンドは任意の位置にカーソルを移動します。パラメタとしてX座標とY
座標を指定してください。数値でないといけません。
        moveto X座標, Y座標
Y座標はファイルの先頭を0として数え,X座標は一番左側の位置を0として数え
た値です。

//---------切り取ってマクロを使ってください---
//ラベル数の文字数
        #labnum = 5;
        $labchr = ":" ;
        #upcnt = 100;
//現在のカーソル位置を記憶
        #x = x ; #y = y;
//上方向検索
//正規化表現(先頭にある":" + 数字5文字 を検索)
        $find = "^" + $labchr + "[0-9][0-9][0-9][0-9][0-9]";
        searchup $find,regular;
//もし検索文字列がみつからなかったら
        if(!result){
                message $find + "が見つかりません";
                goto LEND;
        }
//文字列取り込み
        $num = gettext( 1, y,1+ #labnum  ,y  ) ;
        //$num = gettext( x1, y1, x2, y2 ) ;
        //x1,y1からx2,y2の範囲にある文字列を返します。
//元のカーソル行の先頭位置に戻る
        moveto 0 , #y;
//サブルーチン 引数$numをサブルーチンに引き渡す
        call NUMGEN $num ;
//返り値を $retに戻す
        $num = $$return ;

        insert $labchr + $num;;

LEND:
        endmacro;

NUMGEN:
    $$num = $$1;
    ##num = val($$num) + #upcnt;
    //値によって桁数あわせをする。
    if(##num < 10){
        $$num = "0000" + str(##num) ;
    }
    else if(##num < 100){
        $$num = "000"  + str(##num) ;
    }
    else if(##num < 1000){
        $$num = "00"   + str(##num) ;
    }
    else if(##num < 10000){
        $$num = "0"    + str(##num) ;
    }
    else
        $$num = str(##num) ;
return $$num;
//---------切り取ってマクロを使ってください(終わり)---

>もしくは、もっと簡単なやりかたをご存知の方、
>どうぞお教えください。

実行したい内容がわかりにくいので私なりに解釈しました。(あっていればいいので
すが)
すべての行にラベルを入力する。
初期値を入力する。
初期値+100を終了行まで入力する。

//---------切り取ってマクロを使ってください---
//ラベル数の文字数
    #labnum = 5;
    $labchr = ":" ;
    #upcnt = 100;

    $intnum = "初期値行番号:" ;
    $step = "ステップ:" ;
    #intnum = val(input($ininum,"100"));
    if(#intnum == 0 ){
        message "入力値がおかしいです!!";
        goto LEND;
    }
    #step = val(input($step,str(#upcnt)));
    if(#step == 0 ){
        message "入力値がおかしいです!!";
        goto LEND;
    }

    while( (#code != eof) & (#code1 != eof)){
        call NUMGEN $num ;
        //返り値を $retに戻す
        $num = $$return ;

        insert $labchr + $num +" ";

        golineend2 ;    //行の最後に移動
        #code = code;   //現在のカーソル位置にある文字CODEを取得
        moveto 0,y+1;   //次の行に移動
        #code1 = code;  //現在のカーソル位置にある文字CODEを取得
        //サブルーチン 引数$numをサブルーチンに引き渡す
    }

LEND:
    endmacro;

NUMGEN:
    $$num = $$1;
    ##num = val($$num) + #upcnt;
    //値によって桁数あわせをする。
    if(##num < 10){
        $$num = "0000" + str(##num) ;
    }
    else if(##num < 100){
        $$num = "000"  + str(##num) ;
    }
    else if(##num < 1000){
        $$num = "00"   + str(##num) ;
    }
    else if(##num < 10000){
        $$num = "0"    + str(##num) ;
    }
    else
        $$num = str(##num) ;
return $$num;
//---------切り取ってマクロを使ってください(終わり)---


>それと、現在も手に入る秀丸の参考書をご存知でしたら
>お教えいただけませんか?

JRくんのHPにある秀丸Q&Aを参考にされるといいとおもいます。
http://win.blue.co.jp/~jr-kun/hidemaru_qa/index.html

p.s.
今日で仕事納めなので、わからないことがあって質問されても来年の回答になるかも
しれません。

[ ]
RE:00926 ありがとうございました!No.00927
TORA さん 99/12/30 14:42
 
TORAです。

ブックンさん、ありがとうございました!
ほとんどといっていいくらい、あのままで使えました!

ああいうふうにお手本を読むと
「ああ、こうすればよかったんだ!!」

って、目からウロコがおちたような気がします。

今後ともよろしくご指導ください!

…もちろん安易に頼るわけではなく、
自分で出来る限り精一杯勉強して、
さらにどうしてもわからなかったら…の話ですけれど。

ほんとうにありがとうございました!

[ ]
RE:00926 検索個所の数値を取得する??No.00928
きいろいまふらあ さん 99/12/30 16:43
 
横からきいろいまふらあです。

>すべての行にラベルを入力する。

想像ですが、ラベルはところどころに入るのではないかと思います。
TORAさんがなさりたいのはきっと「ラベルをつけたいな、と思ったときに、
そこに適当なラベルを一発で入力!」ということでしょう。

なので、最初の方のマクロで正解ではないかな?と。

ついでに全く本質的でない余計な口出しをば。

自分ではあまり使ったことないんですが、
gosearchstarted
というコマンドで検索開始位置へ戻れるらしいです。

それから

>    //値によって桁数あわせをする。

これは
$$num = rightstr("0000" + str(##num), #labnum);
でいけるでしょう。
#ちょっと中途半端ですが。

失礼いたしました。

[ ]
RE:00927 ありがとうございました!No.00930
プックン さん 00/01/05 09:37
 
TORAさん あけましておめでとうございます。


>ブックンさん、ありがとうございました!
>ほとんどといっていいくらい、あのままで使えました!

お役に立ててよかったです。
JRくんのQ&Aや、ほかの人のマクロをみて少しずつマクロを
覚えて役に立ててくださいね。

[ ]
RE:00928 検索個所の数値を取得する??No.00931
プックン さん 00/01/05 09:42
 
きいろいまふらあ さん、あけましておめでとうございます。

>自分ではあまり使ったことないんですが、
>gosearchstarted
>というコマンドで検索開始位置へ戻れるらしいです。

このようなコマンドがあったんですね。知らなかったです。
φ(._.)メモメモ

>これは
>$$num = rightstr("0000" + str(##num), #labnum);
>でいけるでしょう。

なるほど、こうすれば桁あわせが簡単にできますね。
さすが、きいろいまふらあ さんですね。ひらめきが違います。
ご指導ありがとうございました。

[ ]