Ich schrieb dies. Ja, ich weiß, es ist VB6. Ja, es ist Produktionscode, und, ja, ich weiß, dass es Gotos verwendet. Ich bin ein faules, böses Tier ...Wie könnte ich dies umschreiben, um die gotos ohne Verlust der Geschwindigkeit oder Lesbarkeit zu entfernen?
mir So zeigen (und den Rest von uns), wie es sollte
Public Function SplitString(ByVal sText As Variant) As Variant
Dim nHere As Long
Dim cHere As String * 1
Dim aRes As Variant
Dim nRes As Long
Dim bInquote As Boolean
Dim sString As String
ReDim aRes(0)
nHere = 1
nRes = 0
Do
If nHere > Len(sText) Then Exit Do
cHere = Mid$(sText, nHere, 1)
If cHere = Chr$(32) Then
If bInquote Then
sString = sString & cHere
GoTo nextChar
End If
If sString <> vbNullString Then
aRes(nRes) = sString
sString = vbNullString
nRes = nRes + 1
ReDim Preserve aRes(nRes)
End If
GoTo nextChar
ElseIf cHere = Chr$(34) Then
bInquote = Not bInquote
GoTo nextChar
Else
sString = sString & cHere
End If
nextChar:
nHere = nHere + 1
Loop
If sString <> vbNullString Then
aRes(nRes) = sString
End If
SplitString = aRes
End Function
Durch die Art und Weise geschrieben werden, teilt sie einen String in ein Array. Die Elemente in der Zeichenfolge können zitiert werden.
Warum denken Sie, dass es im Moment schnell und lesbar ist? –
Sagst du mir, es ist auch nicht? – bugmagnet
Die DO-Schleife sollte eine Zählschleife (FOR?) Sein. Das würde das nextChar-Label überflüssig machen. Sie könnten die Dinge ein wenig optimieren, indem Sie LEN (sText) nicht bei jeder Iteration neu berechnen (es ändert sich nicht). Tatsächlich benötigen Sie selbst bei der DO-Schleife das Label nicht, wenn Sie die Space-Verarbeitung so umstrukturieren, dass ELSEIF anstelle von aufeinander folgenden IF-Anweisungen verwendet wird. –