2019年9月16日月曜日

連番付き変数の登録・取得(_User:name)

_Userを使うと、一時的に文字列を記憶するための変数を利用できる。

_User *setcust _User:name=param , %*getcust(_User:name)
・PPxの設定項目として用意されています。
・PPx内で共通です。(PPc/PPv/PPtray等の何処からでも参照・変更できます。)
・プロセスが終了しても内容は失われません。
PPx間で内容を受け渡ししたいときや、長期に渡り設定を記憶する必要があるときに適しています。

_User:hoge0 _User:hoge1 _User:hoge2 _User:hoge3...というような、連番付き変数に登録する仕組みと、呼び出す仕組みとを作ってみる。

登録


*script %0\Script\setSeqUserData.js,hoge,%FCD

とすれば、_User:hoge0 _User:hoge1 _User:hoge2...にカレントファイルのパスを登録する。

setSeqUserData.js

//!*script
// 第一引数 : ユーザデータ(hoge1 hoge2 hoge3...のhoge)
// 第二引数 : 登録したいデータ(%FCDなど)
// *script %0\Script\setSeqUserData.js,hoge,%FCD のようにして使う。
// この例だと、_User:hoge0 _User:hoge1 _User:hoge2...に順番にカレントファイルを登録する

// 引数がなければ終了
if (PPx.Arguments.Length < 2){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit();
}

var cmd = PPx.Arguments.Item(0);
var macro = PPx.Arguments.Item(1);

// 既に登録されていたら登録しない
for (var i = 0; i < 5; i++) {
  if (PPx.Extract("%*getcust\(_User:"+cmd+i+"\)") == PPx.Extract(macro)){
    PPx.SetPopLineMessage("既に登録されてます");
    PPx.Quit();
  }
}

// _User:に登録
for (var i = 0; i < 5; i++) {
  if (!PPx.Extract("%*getcust\(_User:"+cmd+i+"\)")){
    PPx.Execute("*setcust _User:"+cmd+i+" = "+macro);
    PPx.SetPopLineMessage(cmd+i+"に登録しました");
    break;
  }
}

呼び出し


%*script(%0\Script\getSeqUserData.js,hoge)


とすれば、_User:hoge0 _User:hoge1 _User:hoge2...の中身を順次取得する。

getSeqUserData.js

//!*script
// 第一引数: ユーザーデータ(hoge0 hoge1 hoge2...のhoge)
// 実行すると、hoge0 hoge1 hoge2 hoge3...の値を返す
// %*script(%0\Script\getSeqUserData.js,hoge)のようにして使う

// 引数がなければ終了
if (PPx.Arguments.Length < 1){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var cmd = PPx.Arguments.Item(0);

// cmd0があるかどうかをチェック
if (!PPx.Extract("%*getcust\(_User:"+cmd+0+"\)")){
  PPx.SetPopLineMessage("コマンドが空です");
  PPx.Quit(-1);
}

// cmd_idに1を足す。なければ0を入力
if (!PPx.Extract("%*getcust\(_User:"+cmd+"_id\)")){
  PPx.Execute("*setcust _User:"+cmd+"_id = 0");
}else {
  var i = parseInt(PPx.Extract("%*getcust\(_User:"+cmd+"_id\)")) + 1;
  PPx.Execute("*setcust _User:"+cmd+"_id = "+ i);
}
var i2 = PPx.Extract("%*getcust\(_User:"+cmd+"_id\)");

// commandを実行
if (PPx.Extract("%*getcust\(_User:"+cmd+i2+"\)")){
  PPx.Result = PPx.Extract("%*getcust\(_User:"+cmd+i2+"\)");
}else{
  PPx.Execute("*setcust _User:"+cmd+"_id = 0");
  PPx.Result = PPx.Extract("%*getcust\(_User:"+cmd+0+"\)");
}


参考:ブックマークのローテート - ppxmemo

0 件のコメント:

コメントを投稿