wie kann ich 2 Teile in einem String sortieren

hemi

Grünschnabel
Habe eine Fussballergebnis-Verwaltung und möchte diese hin und wieder mal sortieren. So weit so gut aber wie umsetzen. :( :(

Nehme ich hier mal 4 Beispiel Ergebnisse

1: 9-4
2: 9-0
3: 6-0
4: 9-1

so soll der Linke Teil ABWÄRTS und der rechte AUFWÄRTS sortiert werden.
Das Ergebnis sollte so aussehen:

1: 9-0 [besser als 9-1]
2: 9-1 [besser als 9-4]
3: 9-4 [besser als 6-0]
4: 6-0

Vielen Dank im Voraus!
 
Servus!

Code:
Private Sub Command1_Click()

'1: 9-4
'2: 9-0
'3: 6-0
'4: 9-1

'1: 9-0 [besser als 9-1]
'2: 9-1 [besser als 9-4]
'3: 9-4 [besser als 6-0]
'4: 6-0

Dim ergebnisse() As String

ReDim ergebnisse(9)

ergebnisse(0) = "4-4"
ergebnisse(1) = "9-4"
ergebnisse(2) = "9-0"
ergebnisse(3) = "6-0"
ergebnisse(4) = "9-1"
ergebnisse(5) = "5-1"
ergebnisse(6) = "9-3"
ergebnisse(7) = "6-5"
ergebnisse(8) = "6-4"

Dim i As Integer
Dim j As Integer
Dim tmp As String
Dim swaped As Boolean

Dim msg1 As String

For i = 0 To UBound(ergebnisse)
    msg1 = msg1 + vbCrLf + ergebnisse(i)
Next i


swapped = True

While swapped
    swapped = False
    For i = 0 To UBound(ergebnisse) - 2
        If vergleiche(ergebnisse(i), ergebnisse(i + 1)) < 0 Then
        swapped = True
           tmp = ergebnisse(i)
           ergebnisse(i) = ergebnisse(i + 1)
           ergebnisse(i + 1) = tmp
        End If
    Next i
    
Wend


Dim msg2 As String

For i = 0 To UBound(ergebnisse)
    msg2 = msg2 + vbCrLf + ergebnisse(i)
Next i

MsgBox msg1 + vbCrLf + vbCrLf + msg2, vbInformation




End Sub

Private Function split_erg(erg As String) As String()
    split_erg = Split(erg, "-")
End Function

Private Function vergleiche(erg1 As String, erg2 As String) As Integer
    Dim erg_tmp1() As String
    Dim erg_tmp2() As String
    
    erg_tmp1 = split_erg(erg1)
    erg_tmp2 = split_erg(erg2)
    
    If (CInt(erg_tmp1(0)) > CInt(erg_tmp2(0))) Then
        vergleiche = 1
    ElseIf (CInt(erg_tmp1(0)) < CInt(erg_tmp2(0))) Then
        vergleiche = -1
    Else
        If (CInt(erg_tmp1(1)) > CInt(erg_tmp2(1))) Then
            vergleiche = -1
        ElseIf (CInt(erg_tmp1(1)) < CInt(erg_tmp2(1))) Then
            vergleiche = 1
        Else
        
        vergleiche = 0
        
        End If
        
    End If
    
End Function

...sehr ineffizient, aber tut was verlangt wird ;-)

Gruß Tom
 
Zurück