連番付き変数をファイルに書き出し
%*script(%0\Script\SeqUserData2file.js,hoge)
とすると、連番付き変数(この例なら_User:hoge1 _User:hoge2 _User:hoge3
…)を一時ファイルに一行ずつ書き込み、そのパスを返す。また、
*script %0\Script\SeqUserData2file.js,hoge,%0fuga.txt
として、指定したファイル(この場合はfuga.txt)に書き込むこともできる。
連番付き変数の中身がファイルパスなら、
*ppc %*script(%0\Script\SeqUserData2file.js,hoge)
とすれば、お気に入りのように使うことができる。
SeqUserData2file.js
//!*script
// 連番付き変数をファイルに保存。そのファイルのパスを返す
// テンポラリファイルに保存してそのパスを利用したい場合は
// %*script(%0\Script\SeqUserData2file.js,hoge) のように。特定のファイルに保存したい場合は
// *script %0\Script\SeqUserData2file.js,hoge,fuga.txt とする
// 第一引数 : ユーザデータ(_User:hoge1 _User:hoge2 _User:hoge3...のhoge)
// 第ニ引数 :保存先のファイルパス(省略可能。その場合はテンポラリファイルに保存)
// 引数がなければ終了
if (PPx.Arguments.Length < 1){
PPx.SetPopLineMessage("引数が正しくありません。");
PPx.Quit();
}
// テンポラリファイル名の作成
function getTempFile() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tDir = fso.GetSpecialFolder(2);
var tFile = fso.GetTempName();
return tDir + "\\" + tFile;
}
var cmd = PPx.Arguments.Item(0);
var stream = new ActiveXObject("ADODB.Stream");
stream.type = 2;
stream.charset = 'UNICODE';
stream.open();
stream.WriteText(';ListFile',1);
// 登録済みパス一覧を表示
for (var i = 0; true; i++) {
var str = PPx.Extract("%*getcust\(_User:"+cmd+i+"\)");
if (str){
stream.WriteText(str,1);
} else {
break;
}
}
// 第ニ引数(保存先のファイルパス)があればそこに、なければテンポラリファイルに保存
var filepath;
if (PPx.Arguments.Length < 2){
filepath = getTempFile();
} else {
filepath = PPx.Arguments.Item(1);
}
stream.saveToFile(filepath,2);
stream.close();
PPx.Result = filepath;
連番付き変数をファイルから読み込み
*script %0\Script\file2SeqUserData.js,hoge,%0fuga.txt
とすると、fuga.txtの内容を一行ずつ読み込み、連番付き変数(この例なら_User:hoge1 _User:hoge2 _User:hoge3
…)にセットする。
file2SeqUserData.js
//!*script
// テキストファイルの内容を連番付き変数にセットする
// 第一引数:ユーザーデータユーザデータ(_User:hoge1 _User:hoge2 _User:hoge3...のhoge)
// 第二引数:テキストファイルのパス
// *script %0\Script\file2SeqUserData.js,hoge,%0fuga.txt のようにして使う
// 引数がなければ終了
if (PPx.Arguments.Length < 2){
PPx.SetPopLineMessage("引数が正しくありません。");
PPx.Quit(-1);
}
var s = new ActiveXObject('ADODB.Stream');
var cmd = PPx.Arguments.Item(0);
var fn = PPx.Arguments.Item(1);
// エイリアスをリセット
for (var i = 0; i < 20; i++) {
PPx.Execute("*setcust _User:-|"+cmd+i+" = ");
}
// ファイルを読み取り
s.type = 2;
s.charset = 'UNICODE';
s.open();
s.loadFromFile(fn);
var i = 0;
// エイリアスを順次セット
while(!s.EOS){
line = s.readText(-2);
if (line != "" && line != ";ListFile") {
PPx.Execute("*setcust _User:"+cmd+i+" = "+line);
i++;
}
}
s.close();