.NET FrameworkのStringBuilderクラスをVB6にて使用する


参考:MSDN .NET Framework クラス ライブラリ

文字列作成に強力な力を発揮するStringBuilderクラスをVB6に移植してみました。全てのメソッドに対応しているわけではありませんが、これでもSQL文の作成等にはかなりの力を発揮すると思います。

注意:このクラスはExecuteが勝手に作成したものであり、.NET Frameworkのものとは若干動作が異なります。


StringBuilder クラス


パブリック プロパティ
Length このインスタンスの長さを設定します。現在の長さ未満の長さを指定した場合は、このインスタンスが指定した長さまでに切り捨てられます。指定した長さが現在の長さを超える場合は、このインスタンスの文字列値の末尾に空白が埋め込まれます。


パブリック メソッド
Append 文字列をこのインスタンスの末尾に追加します
Insert 文字列をこのインスタンスの指定した文字位置に挿入します
Remove このインスタンスから、指定した範囲の文字を削除します
Replace このインスタンスに出現する指定文字をすべて、別に指定した文字に置換します
ToString このインスタンスをString型に変換します


サンプルドライバ

	Dim aBuilder As New StringBuilder
	With aBuilder
	    .Append "桜が散って、このように葉桜のころになれば、"
	    .Append "私は、きっと思い出します。"
	    .Remove 2, 3    '「散って」を削除
	    .Insert 19, "の父親"    '「私」の後に「の父親」を挿入
	    .Replace "桜", "サクラ" '「桜」を「サクラ」に置換
	    .Length = 31    '文字長を31字に→「きっと」以後をカット
	    'こんなトリッキーな表現も可能
	    .Append("違いない").Insert(31, "思い出すに").Append "…。"
	    Debug.Print "Len:" & CStr(.Length) & " / " & .ToString
	End With
	Set aBuilder = Nothing


実行結果
Len:42 / サクラが、このように葉サクラのころになれば、私の父親は、きっと思い出すに違いない…。


ソース(クラス名:StringBuilder)

	Option Explicit
	'=============================================
	'ClassName: StringBuilder
	'Created By Execute
	'2004/05/14
	
	Private Const MyName As String = "StringBuilder"
	
	'ローカルデータ
	Private m_stringValue As String
	
	'このインスタンスの長さを取得
	Public Property Get Length() As Integer
	    Length = Len(m_stringValue)
	End Property
	
	'このインスタンスの長さを設定
	'現在の長さ未満の長さを指定した場合は、このインスタンスが
	'指定した長さまでに切り捨てられます。指定した長さが現在の
	'長さを超える場合は、このインスタンスの文字列値の末尾に
	'空白が埋め込まれます。
	Public Property Let Length(ByVal Value As Integer)
	    If (Value < 0) Then
	        'エラー発生
	        Err.Raise 9999, MyName, "ArgumentOutOfRangeException"
	    '現在の長さ以下の長さを指定した場合
	    ElseIf (Value <= Me.Length) Then
	        '指定した長さまでに切り捨て
	        m_stringValue = Left(m_stringValue, Value)
	    '指定した長さが現在の長さを超える場合
	    Else
	        '末尾に空白を埋め込む
	        m_stringValue = m_stringValue & Space(Value - Me.Length)
	    End If
	
	End Property
	
	'クラスの初期化
	Private Sub Class_Initialize()
	    'ローカルデータの初期化
	    m_stringValue = ""
	End Sub
	
	'Method: Append
	'文字列をこのインスタンスの末尾に追加します
	Public Function Append(ByVal Value As String) _
	        As StringBuilder
	    m_stringValue = m_stringValue & Value
	    Set Append = Me
	End Function
	
	'Method: ToString
	'このインスタンスをString型に変換します
	Public Function ToString() As String
	    ToString = m_stringValue
	End Function
	
	
	'Method: Remove
	Public Function Remove(ByVal startIndex As Integer, _
	        ByVal Length As Integer) As StringBuilder
	    If (Length < 0 Or startIndex + Length > Me.Length) Then
	        'エラー発生
	        Err.Raise 9999, MyName, "ArgumentOutOfRangeException"
	    Else
	        m_stringValue = Left(m_stringValue, startIndex) & _
	            Right(m_stringValue, Me.Length - (startIndex + Length))
	    End If
	    Set Remove = Me
	
	End Function
	
	'Method: Insert
	Public Function Insert(ByVal index As Integer, _
	        ByVal Value As String) As StringBuilder
	    If (index < 0 Or index > Me.Length) Then
	        'エラー発生
	        Err.Raise 9999, MyName, "ArgumentOutOfRangeException"
	    Else
	        m_stringValue = Left(m_stringValue, index) & _
	            Value & Mid(m_stringValue, index + 1)
	    End If
	    
	    Set Insert = Me

	End Function

ダウンロードStringBuilder.cls
ダウンロード(サンプル付)StringBuilder.lzh




[ 戻る ]


 このソースコードの著作権は、エグゼキュートが所持します。また、このソースコードはご自由にご利用できますが、それにより生じた直接的・間接的に生じた損害につきまして、弊社はいかなる責任も負いません。