見出し画像

はじめてのJScript+WSH その11 JScriptで疑似クラス

はじめに

JScriptではクラスの概念がないとのことですが、オブジェクトを用いてクラスのようなものが作れるので作っていきます。

オブジェクトとは

まずは、「変数の中に関数や変数があるもの。」と考えると簡単です。

オブジェクト内の変数のうち、外から参照したいものはthisを頭に付けます。
objFU.strInputFilename = "input_1.txt";を実行すると
function FileUtil()内のthis.strInputFilenameが"input_1.txt"になる。

また、オブジェクトの外から関数を変更することもできます。(2ファイル目の処理のobjFU.editStrings = function(){}の部分)

var objFU = new FileUtil();

// 1ファイル目の処理
objFU.strInputFilename = "input_1.txt";
objFU.strOutputFilename = "output_1.txt";
objFU.readFile();
objFU.editStrings();
objFU.writeFile();
objFU.clearStr();

// 2ファイル目の処理
objFU.setFilename("input_2.txt", "output_2.txt");
objFU.readFile();
objFU.editStrings = function(){
	for(var i = 0; i < objFU.arri.length; i++){
		if(objFU.arri[i].search(/^!/) > -1) continue;	         // 先頭が!なら行を無視
		if(objFU.arri[i].replace(/\s/g,"").length == 0) continue; // 空の行を無視
		if(objFU.arri[i].replace(/\s/g,"")=="EOC") continue;      // EOCを無視
		objFU.arro.push(this.arri[i]);
	}
}
objFU.editStrings();
objFU.writeFile();


// File周りの処理クラス
function FileUtil(){

	// 変数いろいろ
	this.strInputFilename = "";
	this.strOutputFilename = "";
	this.numFileOpneState = 0;	// 0:ASCII -1:Unicode -2:SystemDefault

	this.arri = [];		// arrInput(頻出なので省略系で書く)
	this.arro = [];		// arrOutput(頻出なので省略系で書く)


	// 入力ファイルから出力ファイルへ変換
	this.editStrings = function(){
		for(var i = 0; i < this.arri.length; i++){
			if(this.arri[i].search(/^!/) > -1) continue;	         // 先頭が!なら行を無視
			if(this.arri[i].replace(/\s/g,"").length == 0) continue; // 空の行を無視
			if(this.arri[i].replace(/\s/g,"")=="EOC") break;         // EOCを見つけたらforを抜ける
			this.arro.push(this.arri[i]);
		}
	}


	// ファイル読み込み
	this.readFile = function(){
		var fs = new ActiveXObject( "Scripting.FileSystemObject" );
		var file = fs.OpenTextFile( this.strInputFilename, 1, true, this.numFileOpneState );  // 1:読み込み
		while( !file.AtEndOfStream ){
		        this.arri.push(file.ReadLine());
		}
		file.Close();  // ファイルを閉じる
		fs = null;     // オブジェクトを初期化
	}


	// ファイル書き込み
	this.writeFile = function(arr, filename){

		if(this.arro.length > 0){
			var fs = new ActiveXObject( "Scripting.FileSystemObject" );
			var file = fs.OpenTextFile( this.strOutputFilename, 2, true, this.numFileOpneState  ); // 2:新規に書き込み
			for(var i = 0; i < this.arro.length; i++){
				file.WriteLine(this.arro[i]);
			}
			file.Close(); //  ファイルを閉じる
			fs = null;    //  オブジェクトを解放
		}
	}


	// ファイル追記
	this.appendFile = function(arr, filename){

		if(this.arro.length > 0){
			var fs = new ActiveXObject( "Scripting.FileSystemObject" );
			var file = fs.OpenTextFile( this.strOutputFilename, 8, true, this.numFileOpneState  ); // 8:追記
			for(var i = 0; i < this.arro.length; i++){
				file.WriteLine(this.arro[i]);
			}
			file.Close(); //  ファイルを閉じる
			fs = null;    //  オブジェクトを解放
		}
	}


	// ファイル名をセット
	this.setFilename = function(ifn, ofn){
		this.strInputFilename = ifn;
		this.strOutputFilename = ofn;
	}


	// 文字列を初期化
	this.clearStr = function(){
		this.arri = [];
		this.arro = [];
	}
}

おわりに

慣れないうちは難しいかと思いますが、沢山の機器のログを処理する場合等は、クラスの書き方をした方が簡単になります。
また、コードが長く見えますが、クラスの宣言までの部分と、クラス内のeditStringsの部分のみ修正することになるので、意識する部分は少なくて済むと思います。

次の記事

comming soon

前の記事


この記事が気に入ったらサポートをしてみませんか?