VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleJoin - Teilstrings zusammenfügen |
Dim s As String Dim sa(1 To 4) As String sa(1) = "Hier" sa(2) = "ist" sa(3) = "ein" sa(4) = "Text." s = Join(sa) MsgBox s 'ergibt "Hier ist ein Text."
Public Function Join( _
ByRef sArray() As String, _
Optional ByRef Delimiter As String = " " _
) As String
Dim i As Long
For i = LBound(sArray) To UBound(sArray) - 1
Join = Join & sArray(i) & Delimiter
Next i
Join = Join & sArray(UBound(sArray))
End Function
Jedoch ist die Laufzeit dieser Routine wegen der vielen String-Konkatenationen nicht akzeptabel (s.a. Strings schnell aneinander hängen).
Public Function Join( _
ByRef sArray() As String, _
Optional ByRef Delimiter As String = " " _
) As String
Dim JoinLen As Long
Dim JoinPtr As Long
Dim DelimiterLen As Long
Dim LB As Long
Dim UB As Long
Dim i As Long
'Gesamtlänge aller Strings bestimmen:
LB = LBound(sArray)
UB = UBound(sArray)
For i = LB To UB
JoinLen = JoinLen + LenB(sArray(i))
Next i
JoinPtr = 1
DelimiterLen = LenB(Delimiter)
If DelimiterLen Then
'Ergebnis-String anlegen:
JoinLen = JoinLen + DelimiterLen * (UB - LB)
Join = Space$(JoinLen \ 2)
'Kopieren:
For i = LB To UB - 1
MidB$(Join, JoinPtr) = sArray(i)
JoinPtr = JoinPtr + LenB(sArray(i))
MidB$(Join, JoinPtr) = Delimiter
JoinPtr = JoinPtr + DelimiterLen
Next i
MidB$(Join, JoinPtr) = sArray(i)
Else
'Ergebnis-String anlegen:
Join = Space$(JoinLen \ 2)
'Kopieren:
For i = LB To UB
MidB$(Join, JoinPtr) = sArray(i)
JoinPtr = JoinPtr + LenB(sArray(i))
Next i
End If 'DelimiterLen
End Function
© Jost Schwider, 29.01.2001-29.01.2001 - http://vb-tec.de/strjoin.htm