Optimierung?

18/07/2015 - 14:41 von Lothar Geyer | Report spam
Ich habe da eine Function, bei der ich die Laufzeit optimieren möchte.
Die Aufgabe ist, einen Zeichenstring so darzustellen, dass - ausgehend
von rechts - immer zwei Zeichen und dann ein Leerzeichen enthalten sind.
Beispiel: aus "123 4 567" soll "1 23 45 67" werden.

Mein derzeitiger Code:

Private Function StrStruktur(Input As String) As String
Dim tStr As String
Dim ii As Long
Dim nn As Long
Dim ll As Long

tStr = Space$(20)
nn = 20: ll = 0 ' nn = max. lànge
For ii = Len(Input) To 1 Step -1
If Mid$(Input, ii, 1) <> " " Then
If ll = 2 Then
Mid$(tStr, nn, 1) = " "
nn = nn - 1
ll = 0
End If
Mid$(tStr, nn, 1) = Mid$(Input, ii, 1)
nn = nn - 1
ll = ll + 1
End If
Next ii

StrStruktur= Trim$(tStr)

Exit Function

End Function

Die Routine hab ich jetzt grad mal so schnell hingeschmiert, scheint zu
laufen, ist aber noch nicht wirklich getestet.

Verbesserungs-Vorschlàge?

Lothar Geyer
 

Lesen sie die antworten

#1 Thomas Langer
18/07/2015 - 16:24 | Warnen spam
Am 18.07.2015 um 14:41 schrieb Lothar Geyer:
Ich habe da eine Function, bei der ich die Laufzeit optimieren möchte.
Die Aufgabe ist, einen Zeichenstring so darzustellen, dass - ausgehend
von rechts - immer zwei Zeichen und dann ein Leerzeichen enthalten sind.
Beispiel: aus "123 4 567" soll "1 23 45 67" werden.

Mein derzeitiger Code:

Private Function StrStruktur(Input As String) As String
Dim tStr As String
Dim ii As Long
Dim nn As Long
Dim ll As Long

tStr = Space$(20)
nn = 20: ll = 0 ' nn = max. lànge
For ii = Len(Input) To 1 Step -1
If Mid$(Input, ii, 1) <> " " Then
If ll = 2 Then
Mid$(tStr, nn, 1) = " "
nn = nn - 1
ll = 0
End If
Mid$(tStr, nn, 1) = Mid$(Input, ii, 1)
nn = nn - 1
ll = ll + 1
End If
Next ii

StrStruktur= Trim$(tStr)

Exit Function

End Function

Die Routine hab ich jetzt grad mal so schnell hingeschmiert, scheint zu
laufen, ist aber noch nicht wirklich getestet.

Verbesserungs-Vorschlàge?

Lothar Geyer



Hallo Lothar,
probiere mal folgendes:

Function fnStrStruktur(strInput As String) As String
Dim tString As String
Dim iStart As Integer
Dim ii As Integer
strInput = Replace(strInput, " ", "")
iStart = 1
If (Len(strInput) Mod 2) <> 0 Then
tString = Mid$(strInput, 1, 1) & " "
iStart = 2
End If
For ii = iStart To Len(strInput) Step 2
tString = tString & Mid$(strInput, ii, 2) & " "
Next
fnStrStruktur = Trim(tString)
End Function

Der Code reduziert die Anzahl der Schleifendurchlàufe und vermeidet die
If-Abfragen darin.

Gruß
Thomas

zum direkten Antworten Spam weglassen!

Ähnliche fragen