1 件の投稿を表示中 (合計 10 個)
  • 作成者
    投稿
  • #10004
    shiz99
    メンバー

    マクロの中で別のマクロをお呼び出し(コール)の方法はありませんか?

    教えてお願いします。

    #10006
    Yutaka Emura
    キーマスター

    shiz99 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    #include を使えば可能です。詳しくは、

    http://jp.emeditor.com/help/macro/directive/include.htm

    をご覧ください。

    他にも何かご質問がございましたら、ご遠慮なくご連絡ください。
    今後もよろしくお願い申し上げます。

    #10007
    shiz99
    メンバー

    インクルードではなく
    こちらの説明不足ってすみません
    例えば以下のルーチンを作りたい
    (擬似的な外部マクロをお呼び出しのcall命令がある)

    switch(n) {
    case 1: call “a.jsee”; break;
    case 2: call “b.jsee”; break;

    }

    つまりバッチファイルのcall命令と同じ作動のコマンドが欲しい

    日本語はまだ下手で読みにくいならごめんなさい

    #10008
    Yutaka Emura
    キーマスター

    shiz99 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    このような場合は、JavaScript の function 機能を利用して、定義した関数を呼ぶことになります。
    どこかで関数を定義しておき、call “a.jsee” のところで、その関数の名前を書くことになります。関数自体は、a.jsee という別ファイルに書いておいて、マクロの文頭で #include “a.jsee” としてインクルードすることも可能です。

    他にも何かご質問がございましたら、ご遠慮なくご連絡ください。

    今後もよろしくお願い申し上げます。

    #10011
    gecca
    メンバー

    どこの国の方なのでしょうか?
    日本のフォーラムに発言してもらえて嬉しいです。

    こういうことですよね?

    main.jsee

    function include(fileName) {
    var fso = new ActiveXObject(“Scripting.FileSystemObject”);
    var stream = fso.OpenTextFile(ScriptFullName.replace(/[^]*$/, “”) + fileName + “.jsee”);
    eval(stream.ReadAll());
    stream.Close();
    }

    include(“strategy1”);
    include(“strategy2”);

    strategy1.jsee

    alert(“strategy1 is included!”);

    strategy2.jsee

    alert(“strategy2 is included!”);

    もし希望と違っていたら、また質問してください。

    #10014
    Yutaka Emura
    キーマスター

    shiz99 様

    いつも EmEditor Professional をお使いいただき、誠にありがとうございます。

    米国より書いております。私が書きたかったのは、次のようなイメージになります。

    — main.jsee ——————
    #include “strategy1.jsee”
    #include “strategy2.jsee”

    switch(n){
    case 1: func1(); break;
    case 2: func2(); break;
    }

    — strategy1.jsee ——————
    function func1( … ) {
    ….
    }

    — strategy2.jsee ——————
    function func2( … ) {
    ….
    }

    まだ不明な点がございましたらご連絡ください。
    どうぞよろしくお願い申し上げます。

    #10020
    shiz99
    メンバー

    返事遅かったすみません

    答えて有難う、しかし
    その方法は呼び出し先のマクロを一々改造しなければならい
    簡単に他のマクロの利用できません
    とりあえず
    バッチファイルのcall命令
    または
    秀丸マクロのexecmacro命令
    と同じのものがほしい

    なお
    日本語はまだ下手です、読む事はほぼ大丈夫ですが書く事は大変です
    読み難いまたは失礼のところがあるならご勘弁してください

    #10021
    shiz99
    メンバー

    返事遅かったすみません

    >どこの国の方なのでしょうか?
    台湾です

    すごい、evalの機能を利用して擬似的に再現されました
    でも、やはり二つの問題がある
    1、たとえば、呼び出し元のマクロファイルのテキストコードはUTF-16、呼び出し先のマクロのテキストコードはJISならエラー発生します
    2、呼び出し先のマクロの中にスクリプト指示子(#includeなど)があるなら、それもエラー発生します

    なお
    日本語はまだ下手です、読む事はほぼ大丈夫ですが書く事は大変です
    読み難いまたは失礼のところがあるならご勘弁してください

    #10045
    takuya
    参加者

    マクロフォルダにファイルはありますか?

    #include は マクロフォルダのjs ファイルを読みます

    #include “sample.js”

    と書いたら、”c:usersUSERNAMEmacrosample.js”を読み込みます。

    “c:usersUSERNAMEmacrosample.js”はマクロ→設定のカスタマイズ→オプション→マイマクロ
    で指定したフォルダですね。

    #10046
    gecca
    メンバー

    >>shiz99さん

    すみません、返信が遅れてしまいました。

    > 台湾です
    台湾の方でしたか!これからもよろしくお願いします。

    > 1、たとえば、呼び出し元のマクロファイルのテキストコードはUTF-16、呼び出し先のマクロのテキストコードはJISならエラー発生します

    おっしゃる通りです。文字コードの判定は難しいと思います。

    > 2、呼び出し先のマクロの中にスクリプト指示子(#includeなど)があるなら、それもエラー発生します

    これはどうですか?
    文字コードを指定すれば、ちゃんと呼び出せます。
    DEFAULT_CHARSETに、shiz99さんが最もよく使う文字コードを指定してください。

    僕が提示できるのはこれが限界です。

    main.jsee

    function include(fileName, charset) {
    var DEFAULT_CHARSET = “Shift_JIS”;
    var stream = new ActiveXObject(“ADODB.Stream”);
    stream.Open();
    stream.Type = 2;
    stream.Charset = charset || DEFAULT_CHARSET;
    stream.LoadFromFile(ScriptFullName.replace(/[^]*$/, “”) + fileName + “.jsee”);
    eval(stream.ReadText().replace(/^(#[^rn](rn|r|n))*/g, “”));
    stream.Close();
    }

    include(“strategy1”); // include(“strategy1”, “Shift_JIS”);
    include(“strategy2”, “UTF-16”);

    strategy1.jsee (Shift_JIS)

    alert(“strategy1 is included!”);

    strategy2.jsee (UTF-16)

    alert(“strategy2 is included!”);

1 件の投稿を表示中 (合計 10 個)
  • このトピックに返信するにはログインしてください。