|
Die Mid$-Funktion mit ihrer eigenartig anmutenden Fähigkeit, wie eine Eigenschaft auch eine Zuweisung annehmen zu können, ist ganz nützlich, wenn Sie einen String rotieren lassen möchten. Unter "rotieren" verstehen wir hier ein Umlaufen der Zeichen, etwa wie bei einer Laufschrift - und nicht etwa eine sich im Kreis drehende Darstellung eines Textes.
Der folgenden Hilfsfunktion StrRotate übergeben Sie im ersten Parameter Str den zu rotierenden String und im Parameter Direction die Länge und Richtung der Rotation. Voreingestellt ist mit dem Wert 1 eine Bewegung nach rechts um ein Zeichen. Wird ein Wert übergeben, dessen absoluter Wert größer als die Länge des übergebenen Strings ist, wird die tatsächliche Rotation über eine Modula-Division des Richtungswertes durch die Länge des Strings ermittelt.
Im Falle einer positiven Rotation wird zunächst der gegebene String entsprechend nach rechts verschoben auf einen neuen, leeren String gleicher Länge übertragen, und danach wird der rechte, so zu sagen "überstehende" Teil an den Anfang des neuen String kopiert. Bei einer negativen Rotation wird dagegen der so zu sagen "nach links hinausgeschobene" Teil ans Ende des neuen Strings kopiert, und dann der Rest an den dessen Anfang. Die Funktion gibt schließlich den neuen String zurück.
Public Function StrRotate(Str As String, _
Optional ByVal Direction As Long = 1) As String
Dim nLen As Long
Select Case Direction
Case 0
StrRotate = Str
Case Is > 0
nLen = Len(Str)
Direction = Direction Mod nLen
StrRotate = String$(nLen, 0)
Mid$(StrRotate, Direction + 1) = Str
Mid$(StrRotate, 1, Direction) = Right$(Str, Direction)
Case Is < 0
nLen = Len(Str)
Direction = Direction Mod nLen
StrRotate = String$(nLen, 0)
Mid$(StrRotate, 1, nLen + Direction) = _
Mid$(Str, -Direction + 1)
Mid$(StrRotate, nLen + Direction + 1) = Str
End Select
End Function
Wenn der Ausgangs-String nicht erhalten bleiben muss, können Sie auch die Prozedur-Variante StrRotateR verwenden. Bei dieser wird der übergebene String durch den rotierten String ersetzt.
Public Sub StrRotateR(Str As String, ;
Optional ByVal Direction As Long = 1)
Dim nStr As String
Dim nLen As Long
Select Case Direction
Case Is > 0
nLen = Len(Str)
Direction = Direction Mod nLen
nStr = Str
Str = String$(nLen, 0)
Mid$(Str, Direction + 1) = nStr
Mid$(Str, 1, Direction) = Right$(nStr, Direction)
Case Is < 0
nLen = Len(Str)
Direction = Direction Mod nLen
nStr = Str
Str = String$(nLen, 0)
Mid$(Str, 1, nLen + Direction) = _
Mid$(nStr, -Direction + 1)
Mid$(Str, nLen + Direction + 1) = nStr
End Select
End Sub
|