スクリプトによっては各種の設定値をプリファレンスファイルとして保存しておきたい場合があります。

これを実現するには、文字列や数値など型の違う複数の値をすべて文字列化し、「何ワード目から何ワードまではこの変数の値で~」というように記録し、読み込む際はその逆を行うという仕組みを用意しなければなりません。

しかし、配列の値や「ユーザーによって決められた任意の文字列」などは長さが一定ではなく、そういった変数を扱う場合、前述のような記録方法では読み込み・書き込み位置の管理が複雑になります。

また、スクリプトへ変更を加えるたびにそのルーチンも見直さなければならないというのは、バグを産みだす原因にもなりかねません。

 

それのわずらわしさを解消するために、JavaScriptにあるevalunevalという命令を使う方法があります。

unevalは実行命令をテキスト化し、evalは逆にテキスト化された実行命令を復元するものです。この機能を使って変数を記録・復元します。

//設定値(1つのオブジェクトにまとめておく)
var pref= {
    dummyStr : 'なんとか',
    dummyInt : 3,
    dummyArr: ['F', 'B', 'I']
};
var fDir; //汎用

//保存
fDir= File.saveDialog('保存先を指定してください');
if (fDir) {
    var fObj= new File(fDir);
    fObj.open('w');
    fObj.write( uneval (pref) ); //オブジェクトがテキスト化されて書き込まれる
    fObj.close();
}

//読み込み
var loadPref; //テストの結果をわかりやすくするために、あえて別な変数オブジェクトを用意
fDir= File.openDialog('読み込むファイルを選択してください');
if (fDir) {
    fObj = new File(fDir);
    fObj.open('r');
    loadPref= eval( fObj.read() );
}

//読み込み結果を確認
$.writeln ('dummyStr= '+loadPref.dummyStr); //文字列
$.writeln ('dummyInt= '+loadPref.dummyInt); //数値
for (var i=0; i<loadPref.dummyArr.length; i++) {
    $.writeln ('dummyArr['+i+']= '+loadPref.dummyArr[i]); //配列
}

 

書きだされたファイルをテキストエディタで開いてみると、以下のようになっています。

({dummyStr:"なんとか", dummyInt:3, dummyArr:["F", "B", "I"]})

オブジェクトの中にある変数名まで記録しているのがわかります。

 

ポイントは設定値をprefというオブジェクトにまとめているところです。こうしておけば、記録時にあれやこれやと変数をまとめなくても「fObj.write( uneval (pref) );」という命令だけで済ませられます。

加えて、スクリプト中でも各種設定値が「pref.dummyStr」といった記述になるので、コードが分かりやすくなります。

 

 

Joomla templates by a4joomla