2015年10月27日火曜日

JavascriptでINIファイルを解読する その3

JavascriptでINIファイルを解読するシリーズの第3弾です。

前回のJavascriptでINIファイルを解読する その2でお約束していた通り、INIを読み込んで連想配列に返す関数を完成させることができました。

さっそく、ソースをはります。

function myReadInI(myFname){

    var i = 0; // プロパティiはカウンタです。
    var t = null; // コメント除去に使用します。
    var ts = 0;   // これもです。
    var sec = null; //処理中のセクションを記録
    var pal = null; //処理中のパラメータ名を記録
    var returnData = {}; //返り値
 
    // オブジェクト生成
    var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
 
    var objTextStream = objFileSys.GetFile(myFname).OpenAsTextStream(1, 0);
    /*読み込みモードを使用、文字コードはUnicodeです。(Unicode文字が扱えるようにするため)*/
 
    var data = new Array(); // 空の配列
 
    // ファイルが最後まで読み込まれるまでループ  読み込み
    while (!objTextStream.AtEndOfStream) {
 
        t = objTextStream.ReadLine();
        ts = t.indexOf(";"); // コメントを探す
        if(ts == -1){ // コメントがない
            data[i] = t;
        }else{ // コメントあり
            data[i] = t.substring(0, ts);
        }

        //解読

        if(data[i] != ""){  //空行でないか?

            if(data[i].indexOf("[") == 0){  //セクション行

                sec = data[i].slice(1, -1);    //セクション名を抽出する

                returnData[sec] = {}  //さらにパラメータ名の2次元連想配列が作れるようにする

            }else{                          //パラメータ行

                if(data[i].indexOf("=") != -1){  // "="を含む行であることを確認する

                    /* パラメータ名と値を分割(pal[0]がパラメータ名、pal[1]が値) */
                    pal = data[i].split("=");

                    /* 連想配列に代入する */
                    returnData [sec] [pal[0]] = pal[1];
                }

            }

        }
        i++;
    }

    return returnData;

}

前回からの変更点として、

  1. 引数が一つになった
  2. 戻り値が2次元連想配列になった
  3. 若干軽くなった
  4. 何度もファイルを読み込みなおす必要がなくなった
があげられます。また、空行があってもそのあとの行も読み込むようになったほか、セクションの閉じカッコ"]"の省略を禁止しました。


使い方
・引数

引数は1つ必要です。INIファイルまでのパス(絶対パス・相対パス)を文字列で渡します。
・戻り値
INIを解析した結果の2次元連想配列を返します。設定内容は(戻り値)["(セクション名)"]["(パラメータ名)"]で取得できます。

おそらくこのシリーズは今回で終わりとなります。
解説は要望があれば行います。ご希望であればコメントをお願いします。

0 件のコメント:

コメントを投稿

質問や意見などどしどしお寄せください!!