German String zerlegen

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

ich habe einen String, der einen Namen und eine Zahl in spitzen Klammern enthält (z.B. "Hans Muster <0815> oder auch "Peter Maier < 4711 >").
Wie kann ich den String in die beiden Bestandteile zerlegen?

Mit RegEx.Split komme ich da anscheinend nicht weiter :BangHead:
 

klaus

Expert
Licensed User
Longtime User
Regex kann eine Lösung sein.
B4X:
Dim ss1() As String
ss1 = Split("Hans Muster <0815>")
Log("*"&ss1(0)&"*")
Log("*"&ss1(1)&"*")

ss1 = Split("Peter Maier < 4711 >")
Log("*"&ss1(0)&"*")
Log("*"&ss1(1)&"*")
und
B4X:
Sub Split(s As String) As String ()
    Dim ss() As String

    ss = Regex.Split("<", s)
    If ss(0).CharAt(ss(0).Length - 1) = " " Then
        ss(0) = ss(0).SubString2(0, ss(0).Length - 1)
    End If
    ss(0) = ss(0).Replace(">", "")

    ss(1) = ss(1).Replace(" ", "")
    ss(1) = ss(1).Replace(">", "")
    
    Return ss
End Sub
Die Sterne in den Logs sind nur da um zu sehen dass keine Leerzeichen dabei sind.

Beste Grüsse.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Vielen Dank, funktioniert klasse :sign0098:

Ich schaffe es nur nicht, die Funktion "split" so zu erweitern, dass wenn kein oder ein ungültiger Wert in spitzen Klammern vorhanden ist (z.B. durch einen Tippfehler nur "Hans Muster" oder "Hans Muster <0815" oder "Hans Muster <abc>") dieser als 0 übergeben wird.
 

klaus

Expert
Licensed User
Longtime User
Das könnte so aussehen:
B4X:
Sub Activity_Resume
    Dim ss1() As String
    ss1 = Split("Hans Muster <0815>")
    Log("*"&ss1(0)&"*")
    Log("*"&ss1(1)&"*")

    ss1 = Split("Peter Maier1 < 4711 >")
    Log("*"&ss1(0)&"*")
    Log("*"&ss1(1)&"*")

    ss1 = Split("Peter Maier2 <abc >")
    Log("*"&ss1(0)&"*")
    Log("*"&ss1(1)&"*")

    ss1 = Split("Peter Maier3 < 4711")
    Log("*"&ss1(0)&"*")
    Log("*"&ss1(1)&"*")

    ss1 = Split("Peter Maier4 4711>")
    Log("*"&ss1(0)&"*")
    Log("*"&ss1(1)&"*")
End Sub

Sub Split(s As String) As String ()
    Dim ss(2) As String
    
    If s.Contains("<") = False Then
        Msgbox("Falsche Eingabe es fehlt '<'", "Fehler")
        ss(0) = "Fehler"
        ss(1) = ""
        Return ss
    End If
    
    If s.Contains(">") = False Then
        Msgbox("Falsche Eingabe es fehlt '>'", "Fehler")
        ss(0) = "Fehler"
        ss(1) = ""
        Return ss
    End If
    
    ss = Regex.Split("<", s)
    If ss(0).CharAt(ss(0).Length - 1) = " " Then
        ss(0) = ss(0).SubString2(0, ss(0).Length - 1)
    End If
    ss(0) = ss(0).Replace(">", "")

    ss(1) = ss(1).Replace(" ", "")
    ss(1) = ss(1).Replace(">", "")

    If IsNumber(ss(1)) = False Then
        Msgbox("Zweiter Eintrag keine Zahl", "Fehler")
        ss(0) = "Fehler"
        ss(1) = ""
    End If
    
    Return ss
End Sub
Beste Grüsse.
 
Top