掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
高速文字列連結 (ID:85034)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
文字列バッファクラスです。 使い方は----より下を"StringBuffer.cls"として保存し、 プロジェクトに追加してください。あとは「使用例)」を参照してください。 バグがあったらごめんなさい。 --------------------------------------------- VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "StringBuffer" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = False ' @(s) ' 文字列バッファクラス ' 使用例) '| Dim sb As StringBuffer '| Set sb = New StringBuffer '| Call sb.Append("abcde") '| Call sb.Append("123") '| Call MsgBox(sb.ToString) ' Option Explicit Private Const DEF_BUF_SIZE As Long = 128 '' デフォルトのバッファサイズ Private m_Text As String '' 文字列 Private m_Length As Long '' 文字列長 Private m_CapacityIncrement As Long '' バッファ増加量 Private m_Capacity As Long '' バッファ容量 ' @(e) ' ' 機能 : コンストラクタ ' Private Sub Class_Initialize() Call Init(DEF_BUF_SIZE) '' 初期化処理呼び出し End Sub ' @(f) ' ' 機能 : 初期化 ' ' 引き数 : ARG1 - [in ]文字列の長さ ' ' 機能説明 : ' ' 備考 : ' Public Sub Init(ByVal lInitialCapacity As Long) m_Length = 0 '' 文字列長初期化 m_CapacityIncrement = lInitialCapacity '' 同時に確保する文字数初期化 If m_CapacityIncrement < 1 Then '' 1未満ならデフォルト値設定 m_CapacityIncrement = DEF_BUF_SIZE End If m_Text = String$(m_CapacityIncrement, 0) '' 文字列初期化 m_Capacity = m_CapacityIncrement '' バッファ長初期化 End Sub ' @(f) ' ' 機能 : 文字列追加 ' ' 引き数 : ARG1 - [in ]追加する文字列 ' ' 機能説明 : 文字列バッファに文字列を追加する ' Public Sub Append(ByRef sAddStr As String) Dim lAddStrLen As Long ' 追加する文字列長 lAddStrLen = Len(sAddStr) '' 現在確保しているバッファ長で足りない? If m_Capacity < (m_Length + lAddStrLen) Then ''' バッファ確保 m_CapacityIncrement = m_CapacityIncrement * 2 m_Text = m_Text & String$(m_CapacityIncrement, 0) m_Capacity = m_Capacity + m_CapacityIncrement End If '' 文字列追加 Mid$(m_Text, m_Length + 1, lAddStrLen) = sAddStr '' 文字列長設定 m_Length = m_Length + lAddStrLen End Sub ' @(f) ' ' 機能 : 文字列取得 ' ' 返り値 : 文字列 ' Public Property Get Text() As String Text = Left$(m_Text, m_Length) End Property ' @(f) ' ' 機能 : 文字列設定 ' ' 引き数 : ARG1 - 設定する文字列 ' Public Property Let Text(ByRef sNewText As String) m_Text = sNewText m_Length = Len(m_Text) m_Capacity = m_Length End Property ' @(f) ' ' 機能 : 文字列クリア ' Public Sub Clear() m_Text = "" m_Length = 0 m_Capacity = 0 End Sub ' @(f) ' ' 機能 : 文字列取得 ' ' 返り値 : 文字列 ' Public Property Get ToString() As String ToString = Left$(m_Text, m_Length) End Property ' @(f) ' ' 機能 : 文字列バッファの容量取得 ' ' 返り値 : 文字列バッファの現在の容量 ' Public Property Get Capacity() As Long Capacity = m_Capacity End Property
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.