ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

設定ファイルを作成して読み書きする

Twitterで「JavaScriptで処理結果の設定をファイルに保存することってできるのかな?」ってつぶやいている方がいたので、JavaScriptを思い出しながら書いてみました。

 

<仕様>

●ダイアログを表示して設定ファイルの読み書きのどっちか選択

●読み込みを選んだら最前面のドキュメントのwidthとheightを

 設定ファイルに記載されてる数値に変更する

●書き込みを選んだら最前面のドキュメントのwidthとheightを

 設定ファイルに書き込む

 

うん、処理自体の実用性はゼロですね。

他にいいサンプルはなかったのでしょうか(自問自答)

 

あとダイアログの処理があるとどう関数を作成していいのかわからなくなりますね。

最初はダイアログ作るつもりはあまりなかったんですけどね。

こうなんていうか筆がのったというか、なんというか。

最終的にダイアログないと本当の役立たずだったわけですが。

 

一応よく使いそうな処理は関数にしてみたので、コピペすれば使えると思います。

readPrefFile()の戻り値の返し方がいけてない気がするのですが、ひとまず動けばいいよね!

あとドキュメントが開かれていないなどのエラー処理、忘れてました。

各自足しておくように!(ぇ

 

//初期設定
var thisScriptPath = $.fileName; //javaScriptの実行ファイルのパス
var thisScriptDir = thisScriptPath.split("/").reverse().slice(1).reverse().join("/"); //javaScriptの実行ファイルのディレクトリ
var preferencesFileName = "preferences.txt"; //設定ファイル名
var preferencesFilePath = thisScriptDir + "/" + preferencesFileName; //設定ファイルのパス
var myDoc = app.activeDocument; //ドキュメントを変数に入れておく


main();

//メイン関数
function main() {
    //ダイアログ作成
    var myDialog = app.dialogs.add({ name: "PreferenceFileAccess" });
    with (myDialog.dialogColumns.add()) {
        with (dialogRows.add()) {
            with (dialogColumns.add()) {
                var myGroups = radiobuttonGroups.add();
                with (myGroups) {
                    radiobuttonControls.add({ staticLabel: "読み込み", checkedState: true });
                    radiobuttonControls.add({ staticLabel: "書き込み" });
                }
            }
        }
    }

    if (myDialog.show() == true) {
        switch (myGroups.selectedButton) {
            case 0: doReadPrefFile(preferencesFilePath); break;
            case 1: doWritePrefFile(preferencesFilePath); break;
            default: break;
        }
    } else {
        myDialog.destroy()
    }
}

//設定ファイルを読み込む
function doReadPrefFile(filePath) {
    if (existsFilePath(filePath) == true) { //設定ファイルの存在確認
        var result = readPrefFile(preferencesFilePath);
        if (result != false) { //設定ファイルの読み込み処理
            var readParameters = stringsToArray(result); //設定ファイルの内容を配列にする
            var myDocPref = myDoc.documentPreferences;
            myDocPref.pageWidth = readParameters[0]; //ドキュメントの幅を変更
            myDocPref.pageHeight = readParameters[1]; //ドキュメントの高さを変更
            alert("preferences.txtの設定を適用しました。");
        } else {
            alert("処理が異常終了しました。");
            exit();
        }
    } else {
        alert("設定ファイルが存在しません。");
        exit();
    }

}

//設定ファイルを書き込む
function doWritePrefFile(writeFilePath) {
    var myDocParameters = getDocPreferences();
    var writeStrings = arrayToJoin(myDocParameters);
    var result = writePrefFile(writeFilePath, writeStrings);
    if (result == true) {
        alert("preferences.txtへの書き込み処理が正常終了しました。");
    } else {
        alert("preferences.txtへの書き込み処理が異常終了しました。");
    }
}

//設定ファイルの存在チェック
function existsFilePath(filePath) {
    var checkFilePath = new File(filePath);
    if (checkFilePath.exists == true) {
        return true;
    } else {
        return false;
    }
}

//ドキュメントの幅と高さを取得
function getDocPreferences() {
    var myDocPref = myDoc.documentPreferences;
    var myDocWidth = myDocPref.pageWidth;
    var myDocHeight = myDocPref.pageHeight;
    var tempArray = [myDocWidth, myDocHeight];
    return tempArray;
}

//配列をタブで結合
function arrayToJoin(tempArray) {
    var tempText = tempArray.join("\t");
    return tempText;
}

//タブ区切りテキストを配列に
function stringsToArray(tempStrings) {
    var tempArray = tempStrings.split("\t");
    return tempArray;
}

//テキストファイルに書き出す処理
function writePrefFile(filePath, writeData) {
    var fileObj = new File(filePath);
    if (fileObj) {
        var flag = fileObj.open("w");
        if (flag == true) {
            fileObj.write(writeData);
            fileObj.close();
            return true;
        } else {
            alert("ファイルが開けませんでした。書き込みに失敗しました。");
            return false;
        }
    }
}

//テキストファイルに読み出す処理
function readPrefFile(filePath, readStrings) {
    var fileObj = new File(filePath);
    if (fileObj) {
        var flag = fileObj.open("r");
        if (flag == true) {
            readStrings = fileObj.read();
            fileObj.close();
            return readStrings;
        } else {
            alert("ファイルが開けませんでした。読み込みに失敗しました。");
            return false;
        }
    }
}