|
Die Mid$-Funktion bietet in der etwas ungewöhnlichen Syntax, bei
der die Funktion auf der linken Seite einer Zuweisung steht,
überraschend Performance-steigernde Möglichkeiten. Diese Syntax
lautet:
Mid$(ZielString, Position, [Länge]) = TeilString
Denn dabei wird der zugewiesene TeilString einfach im ZielString
an die angegebene Position kopiert. Fehlt die Längenangabe, wird
der TeilString in voller Länge kopiert, anderenfalls wird er auf
die angegebene Länge beschnitten. Der ZielString behält dabei
immer die ursprüngliche Länge, selbst wenn sich, dass aus Position
und Längenangabe ergäbe, dass sie überschritten würde.
Dieses Prinzip des Einkopierens können Sie beispielsweise
nutzen, um das Zusammenfügen einer Reihe von Teilstrings erheblich
zu beschleunigen. Sie geben einfach einen genügend langen leeren
String vor und kopieren die Teilstrings der Reihe nach in diesen
hinein. Dabei müssen Sie lediglich die Einfüge-Position jeweils um
die Länge des vorhergehenden Teilstrings verschieben. Das folgende
Beispiel erstellt eine Liste aller Dateien in Ihrem
Windows-System-Verzeichnis (dessen Pfad natürlich auf Ihrem Rechner
anders lauten kann) aus einer FileListBox:
Zunächst die "konventionelle" Weise:
Dim nFiles As String
Dim nFile As String
Dim i As Integer
With File1
.Path = "c:\windows\system\*.*"
For i = 0 To .ListCount - 1
nFiles = nFiles & .List(i) & vbCrLf
Next 'i
End With
Unter Verwendung der Mid$-Funktion:
Dim nFiles As String
Dim i As Integer
Dim nIndex As Long
With File1
.Path = "c:\windows\system\*.*"
nFiles = Space$(.ListCount * 25)
nIndex = 1
For i =0 To .ListCount - 1
Mid$(nFiles, nIndex) = .List (i)
nIndex = nIndex + Len(.List(i))
Mid$(nFiles, nIndex) = vbCrLf
nIndex = nIndex + 2
Next 'i
End With
nFiles = Trim$(nFiles)
Die einzige Schwierigkeit bei diesem Verfahren liegt darin, von
vornherein die erforderliche Länge des Zielstrings abzuschätzen.
Im Prinzip schadet es nichts, einfach ins Blaue hinein einen auf
jeden Fall genügend langen String zu erzeugen - beim
abschließenden Abschneiden der überzähligen Leerzeichen mit Trim$
macht deren Anzahl keinen Unterschied.
Auch das Ausrichten eines Teilstrings in einem anderen String
können Sie mit der Mid$-Funktion erheblich beschleunigen. Die
Format$-Funktion ist dagegen erheblich langsamer und ist außerdem
auf die Ausrichtung innerhalb eines nur aus Leerzeichen bestehenden
Strings beschränkt. Verwenden Sie dagegen die Mid$-Funktion,
können Sie sogar den Vorgabe-String frei wählen - er kann
beliebige Zeichen enthalten.
Linksbündige Ausrichtung:
Mid$(ZielString, 1) = TeilString
Rechtsbündige Ausrichtung:
Mid$(ZielString, Len(ZielString) - Len(TeilString) + 1) = TeilString
Und sogar mittig ausrichten können Sie mittels Mid$ - das kann
die Format$-Funktion gar nicht:
Mid$(ZielString, (Len(ZielString) - Len(TeilString)) \ 2) = TeilString
Voraussetzung ist hier allerdings, dass der TeilString kürzer
als der ZielString ist. Wenn Sie sich dessen nicht sicher sein
können, wird eine Variation notwendig:
Dim nPosition As Long
nPosition = (Len(ZielString) - Len(TeilString)) \ 2
If nPosition < 1 Then
Mid$(ZielString, 1) = Mid$(TeilString, Abs(nPosition))
Else
Mid$(ZielString, nPosition) = TeilString
End If
|