2013年11月28日


文字列連結では無く、配列を利用した VBScript のクラス

そもそも、VBScript のクラスが珍しいですが、ExecuteGlobal や、ReDim Preserve は、VBScript のテクニックとしてとても重要なステートメントです。実際大量に文字列連結すると、大きくなるほどハフォーマンスが落ちます。しかし、ReDim では単純なメモリの増量のようなので( C++ レベルではそんなに単純でも無いでしょうけれど )かなり高速に動作するはずです。

もっと複雑な処理では、Dictionary オブジェクトを使用すればいいとおもいますが、文字列を作成して処理するだけなら( 例えば HTA における HTML 作成 )こちらのほうが便利です。
Set MyBuffer = CreateBuff

Wscript.Echo MyBuffer.Length

MyBuffer.SetData("001")

Wscript.Echo MyBuffer.Length

MyBuffer.SetData("日本語表示")
MyBuffer.SetData("XYZ")

Wscript.Echo MyBuffer.Length

' 内部配列の直接参照
Wscript.Echo MyBuffer.Buff(1)
MyBuffer.Buff(1) = "日本語"

' 改行コードで連結した内部配列
Wscript.Echo MyBuffer.GetData(vbCrLf)

' カンマで連結した内部配列
Wscript.Echo MyBuffer.GetData(",")


Class buffCon

	Public Buff()

	' ************************************************
	' コンストラクタ
	' ************************************************
	Public Default Function InitSetting()

		Redim Buff(0)

	end function

	' ************************************************
	' メソッド ( データセット )
	' ************************************************
	function Length()

		if IsEmpty( Buff(0) ) then
			Length = 0
		else
			Length =  Ubound(Buff)+1
		end if

	end function

	' ************************************************
	' メソッド ( データセット )
	' ************************************************
	function SetData( strRow )

		if IsEmpty( Buff(0) ) then
			Buff(0) = strRow
		else
			ReDim Preserve Buff(Ubound(Buff)+1)
			Buff(Ubound(Buff)) = strRow
		end if

	end function
	 
	' ************************************************
	' メソッド ( データ取得 )
	' ************************************************
	function GetData( strDelim )

		GetData = Join( Buff, strDelim )

	end function

End Class

' **********************************************************
' バッファ作成
' **********************************************************
Function CreateBuff( )

	ExecuteString = "Dim gblCreateBuff : "
	ExecuteString = ExecuteString & "Set gblCreateBuff = new buffCon"
	ExecuteGlobal ExecuteString
	Call gblCreateBuff

	Set CreateBuff = gblCreateBuff

End Function




posted by at 23:16 | Comment(0) | サンプル | このブログの読者になる | 更新情報をチェックする


この記事へのコメント
コメントを書く
お名前:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。