怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - StringBuilder による文字列の連結

VBScript での文字列の連結には & 演算子を使うのが一般的だが、.NET Framework の StringBuilder クラスを使って連結することもできる。

手軽に使えて & 演算子より性能も良い。大量の文字列を連結するケースでは StringBuilder の利用も検討したい。

サンプルスクリプト

次のスクリプトは、3つの文字列(“Hello”、” “、”World!“)を StringBuilder で連結して表示する。

Dim sb
Set sb = CreateObject("System.Text.StringBuilder")
sb.Append_3 "Hello"
sb.Append_3 " "
sb.Append_3 "World!"
sb.Append_3 vbCrLf
WScript.Echo sb.ToString

StringBuilder のインスタンス生成

StringBuilder を使うには、System.Text.StringBuilder のオブジェクトを生成する。

Set sb = CreateObject("System.Text.StringBuilder")

StringBuilder のプロパティ、メソッド

StringBuilder の主なプロパティやメソッドは次のとおり。

Length プロパティ

格納されている文字列の文字数を取得する。

' "Hello World!〈CR〉〈LF〉" が格納されている場合
WScript.Echo sb.Length
' → 14

Append_3 メソッド

指定した文字列を追加する。

sb.Append_3 "Hello"
sb.Append_3 " "
sb.Append_3 "World!"

AppendFormat_2 メソッド

指定した書式指定に従い処理した文字列を追加する。

書式指定の対応する位置に、指定した文字列が入る。

たとえば、次のように書くと {0} の部分が “Hello” に、{1} の部分が “World!” になる。

sb.AppendFormat_2 "{0} {1}", "Hello", "World!"

AppendLine メソッド(使用不可)

AppendLine メソッドは指定した文字列の末尾に改行文字を加えて追加する。

しかし VBScript からは呼び出せなかった。

なぜかはわからないが「Microsoft VBScript 実行時エラー: オブジェクトでサポートされていないプロパティまたは メソッドです。」になってしまった。

仕方がないので Append_3 メソッドで代用するしかない。

sb.Append_3 "foo"
sb.Append_3 vbCrLf

または AppendFormat_2 メソッドでもよい。

sb.AppendFormat_2 "{0}{1}", "bar", vbCrLf

Clear メソッド(使用不可)

すべての文字列を削除する Clear メソッドも呼び出せなかった。

インスタンスの再作成で代用する。

Set sb = CreateObject("System.Text.StringBuilder")

ToString メソッド

格納されている文字列を取得する。

' "Hello World!" が格納されている場合
WScript.Echo sb.ToString
' → Hello World!