ブログ更新状況

ブログ更新状況
こんど
 急行 未来 8:12 4両4ドア
いつもご覧いただきありがとうございます。                                                                                         種別は更新頻度を(鈍足であるほど更新頻度は早く、各停(毎日更新)、準急(週6日更新)、通勤準急(週5日更新)、快速(週4日更新)、通勤快速(週3日更新)、急行(週2日更新)、快速急行(週1日更新)、特急(それ以下)で回送は更新がほぼ停止している時に表示されます)、発車時刻はその情報がどの時点のものなのかを(8月12日であれば08:12となる)、行先はその更新頻度がいつまで続くのかという予測が反映されています。次発はこれからの予想が反映されます。それ以外は特に意味はございません。                                                                                         本日もご閲覧ありがとうございます。
◆お知らせ◇ コメントを投稿される際は、マナーをお守りください。まず、コメントはそれぞれの記事に関係のあるものをお願いします。また、 スパムコメントは固くお断り致します。 アドバイス等は全く構いませんが、「キモイ」「キチガイ」「二度と見ない」などの内容を発見した場合は、即刻却下いたします。                                                                                         Please swich off your mobile phone when you are near the priority seats. In other areas, please set it to silentmode and refrain from talking on the phone.
つぎ
 調整中

2015年4月11日土曜日

JavaScriptでiniファイルを解読する Var.1.1

前回ソースを公開したINIを解読するための関数「myReadInI()」。

その更新バージョンを作りましたので、またもソースを公開します。


function myReadInI(mySname, myPname, myFname){

var i = 0; // プロパティiとjはカウンタです。
var j = 0;
var t = null; // コメント除去に使用します。
var ts = 0;   // これもです。

// オブジェクト生成
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");

var objTextStream = objFileSys.GetFile(myFname).OpenAsTextStream(1, 0);
/*読み込みモードを使用、文字コードはUnicodeです。(Unicode文字が扱えるようにするため)*/

var data = new Array(); // 空の配列

// ファイルが最後まで読み込まれるまでループ  読み込み
while (objTextStream.AtEndOfLine==false) {

   t = objTextStream.ReadLine();
   ts = t.indexOf(";"); // コメントを探す
   if(ts == -1){ // コメントがない
    data[i] = t;
   }else{ // コメントあり
    data[i] = t.substring(0, ts);
   }
   i++;
}

// 読み込み及びコメント除去 ここまで
// 解読 ここから

do{
 var my1 = data[j].indexOf("[" + mySname);
 j++;
}while(my1 == -1); // 一行ずつ検索し、該当するセクションを探す
j--;

// 指定のセクションの内容の始まる行数(0から)を退避
var mySstert = j + 1;

// セクションの終わりを探す(先ほど先頭が見つかった行の次からスタート)
j++;
do{
 var my2 = data[j].indexOf("[");
 j++;
}while(my2 == -1);
j--;

// 指定セクションの最後の行を退避
mySend = j - 1;

// パラメータ名を検索
var my3 = mySstert;
do{
 var my4 = data[my3].substring(0, data[my3].indexOf("="));
 my3++;
}while(my4 != myPname);
my3--;

// 抽出
var Returndata = data[my3].substring(data[my3].indexOf("=") + 1);

// 得られた値を返す
return Returndata;

} // function宣言終了


強調表示されている行が変更箇所です。
では解説を。

t = objTextStream.ReadLine();


ファイル読み込み部分ですが、前回と違いいきなりdata配列に代入せず、一旦変数tに代入しました。(もう少しそれらしい名前をつけてあげましょう(^ ^; )

ts = t.indexOf(";"); // コメントを探す
if(ts == -1){ // コメントがない
 data[i] = t;
}else{ // コメントあり
 data[i] = t.substring(0, ts);
}


はい、ここが一番前回と異なる点です。前回は最後にコメント除去をしていました。パラメータ名は=の左側と完全一致しているかで、引数で指定されたパラメータ名と一致しているかの判定していたため問題ありませんでした。しかし、セクション名はindexOf()で一行ずつ検索をかけていたため、セミコロンをつけても角カッコがセクション名として認識されていました。今回のバージョンアップでそれが改善された形となります。
indexOf()で;を検索し、もしも;が存在すればそこから右を削除します。そのあとにdata配列に代入しているのです。

当然、ファイル読み込み時にコメント除去処理をしたため、最後のコメント除去プログラムは削除しました。

※この関数はコールされるたびにファイルを読み込み直し、一行ずつコメント除去、セクション名およびパラメータ名の検索をします。PHPのmail()関数のように何度も呼び出すのは非常に非効率的であります。現在その欠点を解消した関数を開発中です、、、
今しばらくお待ちください。

0 件のコメント:

コメントを投稿