- 作成者投稿
- 2010年11月27日 11:44 am #10004
shiz99
メンバーマクロの中で別のマクロをお呼び出し(コール)の方法はありませんか?
教えてお願いします。
2010年11月27日 9:27 pm #10006Yutaka Emura
キーマスターshiz99 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
#include を使えば可能です。詳しくは、
http://jp.emeditor.com/help/macro/directive/include.htm
をご覧ください。
他にも何かご質問がございましたら、ご遠慮なくご連絡ください。
今後もよろしくお願い申し上げます。2010年11月28日 2:39 am #10007shiz99
メンバーインクルードではなく
こちらの説明不足ってすみません
例えば以下のルーチンを作りたい
(擬似的な外部マクロをお呼び出しのcall命令がある)switch(n) {
case 1: call “a.jsee”; break;
case 2: call “b.jsee”; break;
…
}つまりバッチファイルのcall命令と同じ作動のコマンドが欲しい
日本語はまだ下手で読みにくいならごめんなさい
2010年11月28日 4:05 am #10008Yutaka Emura
キーマスターshiz99 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
このような場合は、JavaScript の function 機能を利用して、定義した関数を呼ぶことになります。
どこかで関数を定義しておき、call “a.jsee” のところで、その関数の名前を書くことになります。関数自体は、a.jsee という別ファイルに書いておいて、マクロの文頭で #include “a.jsee” としてインクルードすることも可能です。他にも何かご質問がございましたら、ご遠慮なくご連絡ください。
今後もよろしくお願い申し上げます。
2010年11月29日 8:19 am #10011gecca
メンバーどこの国の方なのでしょうか?
日本のフォーラムに発言してもらえて嬉しいです。こういうことですよね?
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!”);
もし希望と違っていたら、また質問してください。
2010年11月29日 9:56 pm #10014Yutaka 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( … ) {
….
}まだ不明な点がございましたらご連絡ください。
どうぞよろしくお願い申し上げます。2010年12月3日 8:27 am #10020shiz99
メンバー返事遅かったすみません
答えて有難う、しかし
その方法は呼び出し先のマクロを一々改造しなければならい
簡単に他のマクロの利用できません
とりあえず
バッチファイルのcall命令
または
秀丸マクロのexecmacro命令
と同じのものがほしいなお
日本語はまだ下手です、読む事はほぼ大丈夫ですが書く事は大変です
読み難いまたは失礼のところがあるならご勘弁してください2010年12月3日 8:27 am #10021shiz99
メンバー返事遅かったすみません
>どこの国の方なのでしょうか?
台湾ですすごい、evalの機能を利用して擬似的に再現されました
でも、やはり二つの問題がある
1、たとえば、呼び出し元のマクロファイルのテキストコードはUTF-16、呼び出し先のマクロのテキストコードはJISならエラー発生します
2、呼び出し先のマクロの中にスクリプト指示子(#includeなど)があるなら、それもエラー発生しますなお
日本語はまだ下手です、読む事はほぼ大丈夫ですが書く事は大変です
読み難いまたは失礼のところがあるならご勘弁してください2010年12月13日 9:20 am #10045takuya
参加者マクロフォルダにファイルはありますか?
#include は マクロフォルダのjs ファイルを読みます
#include “sample.js”
と書いたら、”c:usersUSERNAMEmacrosample.js”を読み込みます。
“c:usersUSERNAMEmacrosample.js”はマクロ→設定のカスタマイズ→オプション→マイマクロ
で指定したフォルダですね。2010年12月13日 11:58 am #10046gecca
メンバー>>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!”);
- 作成者投稿
- このトピックに返信するにはログインしてください。