के रूप में अन्य लोगों ने बताया है, वीबी में हर स्ट्रिंग संयोजन एक नया स्ट्रिंग आवंटित और फिर डेटा पर और उसके बाद की प्रतिलिपि बनाएगा डी-आवंटन यह कर सकते हैं एक बार मूल। एक लूप में यह मुद्दों का कारण बन सकता है।
इस हल करने के लिए आप इस तरह एक साधारण StringBuilder वर्ग बना सकते हैं:
Option Explicit
Private data As String
Private allocLen As Long
Private currentPos As Long
Public Function Text() As String
Text = Left(data, currentPos)
End Function
Public Function Length() As Long
Length = currentPos
End Function
Public Sub Add(s As String)
Dim newLen As Long
newLen = Len(s)
If ((currentPos + newLen) > allocLen) Then
data = data & Space((currentPos + newLen))
allocLen = Len(data)
End If
Mid(data, currentPos + 1, newLen) = s
currentPos = currentPos + newLen
End Sub
Private Sub Class_Initialize()
data = Space(10240)
allocLen = Len(data)
currentPos = 1
End Sub
इस वर्ग स्ट्रिंग उस में रिक्तियों के साथ बनाया जा करने के लिए मजबूर है और फिर ओवरराइट करके स्ट्रिंग आवंटन की संख्या को कम कर देंगे आवश्यकतानुसार रिक्त स्थान। यह अपने आकार को मोटे तौर पर दोगुना करने के लिए फिर से आवंटित करता है जब यह पाया जाता है कि इसमें पर्याप्त स्थान पूर्व-प्रारंभिक नहीं है। पाठ विधि वास्तव में उपयोग की जाने वाली स्ट्रिंग के हिस्से को वापस कर देगी।
स्रोत
2008-09-18 16:30:06
क्या आप उस त्रुटि के आसपास कोड को पेस्ट कर सकते हैं जो त्रुटि लौटाता है? – Robit
शामिल चर के घोषणा भी उपयोगी हो सकती हैं – Robit