◀一般トップへ
  • 3386 [要望]キーマクロの指定回数実行
    • 3391 Re:[要望]キーマクロの指定回数実行
      • 3396 Re2:[要望]キーマクロの指定回数実行
        • 3416 Re3:[要望]キーマクロの指定回数実行
          • 3417 Re4:[要望]キーマクロの指定回数実行
      • 3412 Re2:[要望]キーマクロの指定回数実行
        • 3418 Re3:[要望]キーマクロの指定回数実行
        • 3419 Re3:[要望]キーマクロの指定回数実行
          • 3426 Re4:[要望]キーマクロの指定回数実行
            • 3430 Re5:[要望]キーマクロの指定回数実行
            • 3433 Re5:[要望]キーマクロの指定回数実行
          • 3434 Re4:[要望]キーマクロの指定回数実行
            • 3437 Re5:[要望]キーマクロの指定回数実行
  • [3386] [要望]キーマクロの指定回数実行 kaz 2003年10月15日 22:45

    はじめまして。
    最近Mifesから乗り換えた者です。
    とても素晴らしいエディタに出会えて感動しています。
    もうMifesにはきっと戻らないでしょう。
    で、Mifesにあった機能で1つ欲しい機能があるのですが
    それがキーマクロの指定回数実行です。
    キーマクロを記録した後に簡単な操作でそれを指定回数実行できると
    嬉しいのですが。
    是非ご検討をお願いします。
    • [3391] Re:[要望]キーマクロの指定回数実行 wmlhq 2003年10月16日 11:22

      ShiftとCtrlを押しながらLを指定回数連打するか、またはマクロをファイルに保存した後、複数回実行されるように編集したものを開いて呼び出す。
      • [3396] Re2:[要望]キーマクロの指定回数実行 ty 2003年10月17日 09:26

        ▼ wmlhqさん
        > ShiftとCtrlを押しながらLを指定回数連打するか、またはマクロをファイルに保存した後、複数回実行されるように編集したものを開いて呼び出す。

        おっしゃるとおりですが、例えば、一回のみの作業で1000回の連続的な作業、という場合は、面倒というか、手間が増えるのが厄介です。
        良かったら、ご検討ください。
        • [3416] Re3:[要望]キーマクロの指定回数実行 げんた 2003年10月18日 01:04

          >おっしゃるとおりですが、例えば、一回のみの作業で1000回の連続的な作業、
          面倒でなければPPA等でループを記述する方法も検討してみてください.

          面倒といわれればそれまでですが(汗
          ループ回数をPopupで入力させるようなことはPPAからできたっけなぁ.
          • [3417] Re4:[要望]キーマクロの指定回数実行 すい 2003年10月18日 05:49

            >ループ回数をPopupで入力させるようなことはPPAからできたっけなぁ.

            ----------
            // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに PPA.DLL を入れておいてください。
            // マクロファイルの拡張子は .PPA でなくてはなりません。

            // マクロを実行する回数を入力するダイアログを出し、
            // そこで指定された回数マクロを実行する。

            var
            cnt,max:Integer; // 整数数値型変数 cnt と max を用意する
            begin

            max := StrToInt( InputBox('マクロ実行','マクロを実行する回数を入力して下さい。','') );

            for cnt := 1 to max do begin // {

            // ここに指定回数実行したい内容を書き込む
            S_InsText( IntToStr(cnt) + '回目の文字列出力です。');
            S_Char(13); // 改行する

            end; // }
            end;
            ----------
      • [3412] Re2:[要望]キーマクロの指定回数実行 kaz 2003年10月17日 23:43

        ▼ wmlhqさん
        > ShiftとCtrlを押しながらLを指定回数連打するか、またはマクロをファイルに保存した後、複数回実行されるように編集したものを開いて呼び出す。
        そうですね(笑)
        今はそのようにやってるんですが、ちょっと面倒だったもので・・・。

        ついでの話ですが、キーマクロの実行中にエラーやEOFに達したら
        実行を中断できると嬉しいです。
        良く私はある文字を検索して、その何バイトか後ろの文字を削除する
        と言うようなキーマクロをひたすら実行することがあるのですが
        Shift+Ctrl+Lを連打しすぎて消してはいけない文字を大量に消してしまうことが
        あるんですよ。
        そこで検索にヒットしなかったときとかEOFに達したときにマクロが中断してくれると
        いいなと思うわけです。
        ちなみにこれもMifesがこういう仕様なのでっていうのが多分にあるのですが・・・
        • [3418] Re3:[要望]キーマクロの指定回数実行 すい 2003年10月18日 06:54

          >EOFに達したら
          >実行を中断できると嬉しいです。

          PPAマクロで一応可能ですけど面倒ですな。
          ----------
          // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに PPA.DLL を入れておいてください。
          // マクロファイルの拡張子は .PPA でなくてはなりません。
          // TAB=4

          // ファイル終端に達した場合に処理を終了するサンプル

          // マクロ実行開始時にカーソルがある行から、行末の1文字を削除していく。
          // 始めに実行する回数を入力するダイアログを出し、そこで指定された行数だけ削除処理をする。
          // ただし、ファイル終端に到達したら、即、マクロの処理を中断する。

          var
          cnt,max:Integer; // 整数数値型変数 cnt と max を用意する
          // csry,eol:Integer; // 整数数値型変数 csry と eol を用意する
          begin

          max := StrToInt( InputBox('マクロ実行','マクロを実行する回数を入力して下さい。','') );

          for cnt := 1 to max do begin // {

          // // ファイルの行数情報の取得方法のサンプル
          // eol := S_GetLineCount(0); // ← ファイルの行数(改行単位の行数)を取得する方法
          // csry := StrToInt( S_ExpandParameter('$y') ); // ← カーソルがある行番号(改行単位の行番号)を取得する方法
          // MessageBox( '現在の行番号'+IntToStr(csry) + ' / 全行数'+IntToStr(eol) , IntToStr(cnt)+'回目の実行です('+IntToStr(max)+'回実行予定)' , 0 ); // for DEBUG

          // 実際の「ファイル終端に到達したら中断する処理」の記述は↓コレ
          if ( StrToInt(S_ExpandParameter('$y')) > S_GetLineCount(0) ) then begin
          MessageBox( 'ファイル末尾に到達したためマクロを終了します。' , 'マクロ終了' , 0 );
          Exit;
          end;

          // 実際におこなう処理内容
          S_GoLineEnd(0); // 行末に移動(折り返し単位)
          S_DeleteBack(0); // カーソル前を削除
          S_Down(0); // カーソル下移動

          end; // }
          end;
          ----------

          >ちなみにこれもMifesがこういう仕様なのでっていうのが多分にあるのですが・・・
          なつかしい。
        • [3419] Re3:[要望]キーマクロの指定回数実行 すい 2003年10月18日 07:01

          >良く私はある文字を検索して、その何バイトか後ろの文字を削除する
          >と言うようなキーマクロをひたすら実行することがあるのですが
          >Shift+Ctrl+Lを連打しすぎて消してはいけない文字を大量に消してしまうことが
          >あるんですよ。
          >そこで検索にヒットしなかったときとかEOFに達したときにマクロが中断してくれると
          >いいなと思うわけです。

          ----------
          // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに PPA.DLL を入れておいてください。
          // マクロファイルの拡張子は .PPA でなくてはなりません。
          // TAB=4

          // 文字列 abc を検索し、見つかった abc から3文字後ろへ移動して2文字を削除する。
          // 始めに実行する回数を入力するダイアログを出し、そこで指定された回数だけ削除処理をする。
          // ただし、文字列 abc が見つからなかったら、指定回数に達していなくてもマクロ処理を終了する。

          var
          cnt,max:Integer; // 整数数値型変数 cnt と max を用意する
          find:Integer; // 整数数値型変数 find を用意する
          begin

          max := StrToInt( InputBox('マクロ実行','マクロを実行する回数を入力して下さい。','') );

          find := 0; // 実際に処理した回数 = 0 (リセット)
          for cnt := 1 to max do begin // {

          S_SearchNext('abc', 16); // 文字列 abc を検索

          if ( S_GetSelectedString(0) = '' ) then begin
          // 検索文字列が見つからなかった
          MessageBox( '検索文字列が見つかりませんでした。処理を中断します。' , 'マクロ終了',0);
          Break;
          end;

          find := find +1; // 処理回数をカウント。実際に処理した回数を +1 しておく。

          // 3文字後ろへ移動して、2文字削除する
          S_Right(0); // カーソル右移動
          S_Right(0); // カーソル右移動
          S_Right(0); // カーソル右移動
          S_Delete(0); // 削除
          S_Delete(0); // 削除

          end; // }

          MessageBox( IntToStr(find) + '箇所 処理をおこないました','まっくろ終了',0 );

          end;
          ----------
          • [3426] Re4:[要望]キーマクロの指定回数実行 kaz 2003年10月20日 13:25

            ▼ すいさん
            サンプルのマクロまで作っていただき、ありがとうございました。
            これを参考にやってみたいと思います。
            ちなみにPPAマクロからキーマクロを呼び出すなんてことはできないでしょうか?
            質問ばかりで済みません。
            お暇なときにでもお教えください。
            • [3430] Re5:[要望]キーマクロの指定回数実行 げんた 2003年10月21日 02:10

              >ちなみにPPAマクロからキーマクロを呼び出すなんてことはできないでしょうか?
              基本的にキーマクロはそのままPPAマクロとしても動くようになっていると思います.
            • [3433] Re5:[要望]キーマクロの指定回数実行 すい 2003年10月21日 03:41

              >ちなみにPPAマクロからキーマクロを呼び出すなんてことはできないでしょうか?

              PPAマクロ中から他の PPAマクロや、拡張子.MAC のキーボードマクロを
              サブルーチン呼び出しのような感じで呼び出す事はできません。
              同様に他のマクロファイルへ実行を移すような事も一切できません。

              サンプル中の
              「// 3文字後ろへ移動して、2文字削除する」以降の場所を
              いちいち書き換えて利用するしか手はないかと。

              良く書き換えて使いそうなら、このマクロのファイルを
              「ツール」→「お気に入りの設定」で“お気に入り”にでも
              チェックして、「最近使ったファイル」から すぐ簡単に
              編集できるようにしておくとか。面倒だと思いますけど。

              ちなみについでに、PPAマクロ中では関数などを定義する事もできません。

              あくまで単一のマクロファイル内の記述を、上から下へ一直線に処理するのみです。
              条件付きループや条件分岐 程度の制御構文があるだけで。
          • [3434] Re4:[要望]キーマクロの指定回数実行 すい 2003年10月21日 04:02

            >>良く私はある文字を検索して、その何バイトか後ろの文字を削除する
            >>と言うようなキーマクロをひたすら実行することがあるのですが
            >>Shift+Ctrl+Lを連打しすぎて消してはいけない文字を大量に消してしまうことが
            >>あるんですよ。
            >>そこで検索にヒットしなかったときとかEOFに達したときにマクロが中断してくれると
            >>いいなと思うわけです。

            ちなみに「検索対象文字列のすぐ後ろに改行がある場合もある」
            という時には、このようなマクロじゃないと駄目ですけど、改行が
            来ないのなら正規表現の置換使った方が速いし楽ですよ。

            置換ダイアログにて
            ・置換前:(abc..)..
            ・置換後:$1
            ・正規表現 ←チェックON

            の置換で同じ処理ができます。
            # 置換前の '.'(半角のピリオド(小数点))の数が削除したりする文字の数になります。

            このマクロを使う必要があるとしたら、処理対象のテキストが

            -----
            abc
            defg
            -----
            ↓処理後
            -----
            abc
            dg
            -----

            みたいに、abc の後ろに改行が来る場合にも(次の行を)削除処理
            しないとならない場合くらいでしょう。
            • [3437] Re5:[要望]キーマクロの指定回数実行 kaz 2003年10月21日 22:54

              すいさん、げんたさん
              色々お教えいただきありがとうございました。
              とりあえず教えていただいた方法をその時々で使ってやっていこうと思います。
              これからもよろしくお願いします。