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; }
前回からの変更点として、
- 引数が一つになった
- 戻り値が2次元連想配列になった
- 若干軽くなった
- 何度もファイルを読み込みなおす必要がなくなった
使い方
・引数
引数は1つ必要です。INIファイルまでのパス(絶対パス・相対パス)を文字列で渡します。
・戻り値
INIを解析した結果の2次元連想配列を返します。設定内容は(戻り値)["(セクション名)"]["(パラメータ名)"]で取得できます。
おそらくこのシリーズは今回で終わりとなります。
解説は要望があれば行います。ご希望であればコメントをお願いします。
0 件のコメント:
コメントを投稿
質問や意見などどしどしお寄せください!!