Split mit mehreren verschiedenen Trennzeichen

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von suchti12.

    Split mit mehreren verschiedenen Trennzeichen

    Hy ich hab folgendes Problem ich möchte meinen Text so an einem bestimmten zeichen splitten währe ja jetzt kein Problem, aber ich hab mehrere verschiedene

    Beispieltext:

    Adresse 12 B2 Mittelbrand


    statt B2 kann auch B1,B3,T1,T2,T3,H1,H2 stehen

    wie kann ich nun das splitten ich wert doch wohl nicht 10 splitt Befehle machen, oder?
    Was soll denn hinterher rauskommen?
    Splitte "Adresse 12 B2 Mittelbrand" nach Space und Du bekommst 4 Strings:
    Adresse
    12
    B2
    Mittelbrand
    -----
    Ansonsten sieh Dir mal dies hier an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Und woher soll VB dann wissen, wo er splitten soll? Am 2. Leerzeichen?

    VB.NET-Quellcode

    1. Dim Text as string = "Adresse 12 B2 Mittelbrand"
    2. Dim str() as string = Text.Split(CChar(" "))
    3. Text = String.Combine(str(0), str(1))
    (Q&D-Bsp.!)
    Adresse 12 B2 Mittelbrand

    Bin mir nicht sicher ob's klappt ist ausm Kopf.

    VB.NET-Quellcode

    1. Dim Strings As String = "B1,B3,T1,T2,T3,H1,H2"
    2. 'z.B: List(x)
    3. 'x = Stringergebniss
    4. '0 = B1
    5. '3 = T2
    6. '5 = H1
    7. Dim list() As String = Strings.Split(",")
    8. Msgbox("Adresse 12 " & list(0) & " Mittelbrand")


    In der MsgBox würde nun "Adresse 12 B1 Mittelbrand" stehen.
    Wenn du z.B: Msgbox("Adresse 12 " & list(3) & " Mittelbrand") machst würde "Adresse 12 T2 Mittelbrand" stehen.
    Und wozu brauchst du da eine Splitanweisung? Um ein Array zu erstellen?

    VB.NET-Quellcode

    1. Dim list() As String = {"B1", "B3", "T1", "T2", "T3", "H1", "H2"}

    petaod schrieb:

    VB.NET-Quellcode

    1. Result = MyText.Split({" B1 "," B3 "," T1 "," T2 "," T3 "," H1 "," H2 "})(0)
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    OK. Nur was hilft das dem TE?
    Nach Space splitten und die ersten beiden Elemente.
    Fertich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin von der Aussage in Post 3 ausgegangen
    "Es soll dann "Adresse 12" rauskommen also soll genau vor B2 gesplittet werden"
    Wie variabel die Datensätze sind, geht nicht so ganz klar hervor.

    Da wär's echt nicht schlecht, wenn sich der TE mal wieder melden würde.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die Antworten, hab leider keine Zeit gehabt weil ich gerade bei der Stellung bin und nicht allzu viel zeit hab zum schreiben.

    Bei den Datensätzen handelt es sich um Alamierungs-Texte meiner Feuerwehr, ein Text sieht so aus:

    Einsatz für FF: Adresse 12 B3 Großbrand mit FF beide DL

    Das splitten am ":" ist eh einfach und danach gehört nur mehr an der Taktischenbezeichnung("B2","B3",..) getrennt, so das die Adresse übrig bleibt
    Die Datensätz sind nur so weit Variabel das sich die taktische bezeichnung ändern kann (B2,B3,T1)

    Ich hätte folgendes ausprobiert:

    VB.NET-Quellcode

    1. hilfsVar2 = hilfsVar(0).Split({" B1 ", " B3 ", " T1 ", " T2 ", " T3 ", " H1 ", " H2 "}, StringSplitOptions.None)(0)

    Beide als Array definiert, folgenden Fehler bekomm ich

    VB.NET-Quellcode

    1. Das Objekt des Typs "System.String" kann nicht in Typ "System.Array" umgewandelt werden.



    danach hätte ich die Zeile so angepasst

    VB.NET-Quellcode

    1. hilfsVar2 = hilfsVar(0).ToString.Split({" B1 ", " B3 ", " T1 ", " T2 ", " T3 ", " H1 ", " H2 "}, StringSplitOptions.None)(0)


    danach bekomm ich folgenden Fehler

    VB.NET-Quellcode

    1. Fehler 1 Der Wert vom Typ "String" kann nicht in "System.Array" konvertiert werden.



    Wenn ich dann hilfsVar2 als String definier bekomm ich bei einem Beispiel-Text ein einziges zeichen zurück.
    Hy, meine Function sieht jetzt folgend ermassen aus

    VB.NET-Quellcode

    1. Public Function getAdress(ByVal emailText) As String Dim adress As String Dim hilfsVar As Array Dim hilfString As String Dim hilfsVar2 As String
    2. ' Zeichen =ü gegen ü austauschen ' Zeichen = ß gegen ß austauschen ' Zeichen = ä gegen ä austauschen ' Zeichen = ö gegen ö austauschen
    3. hilfsVar = emailText.Split(":")(1) hilfString = hilfsVar(1) hilfsVar2 = hilfString.Split({" B1 ", " B3 ", " T1 ", " T2 ", " T3 ", " H1 ", " H2 "}, StringSplitOptions.None)(0)
    4. adress = hilfsVar2
    5. Return adress End Function


    Nur leider bekomm ich nicht das gewünschte ergebniss, sondern er splittet einfach nicht
    Mal mit dem Debugger durchgegangen?
    Was steht denn in emailText und in den Hilfsvariablen drin?

    Es geht übrigens auch ohne den Overhead (dafür mit Fehlervermeidungsabfrage):

    VB.NET-Quellcode

    1. Public Function getAdress(ByVal emailText As String) As String
    2. If emailText.Contains(":") Then Return emailText.Split(":"c)(1).Split({" B1 ", " B3 ", " T1 ", " T2 ", " T3 ", " H1 ", " H2 "}, StringSplitOptions.None)(0) Else Return Nothing
    3. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --