Split Funktion an Trennzeichen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Alex0815.

    Split Funktion an Trennzeichen

    Ich habe ein Problem mit der Zerlegung von Strings, der String ist so aufgebaut : "12|43|45|77"

    Jetzt will ich immer bei | die Zahl davor bis zum vorherigen | in ein Array packen. Also in diesem Fall so:
    testgesplittet(0) wäre 12
    testgesplittet(1) wäre 43
    testgesplittet(2) wäre 45
    testgesplittet(3) wäre 77

    Das Ganze versuche ich zur Zeit so und funktioniert auch soweit, wenn ich das sstring mit "12|43|45|77" initialisiere

    VB.NET-Quellcode

    1. Dim sstring As String = "12|43|45|77"
    2. Dim testgesplittet() As String = sstring.Split(CChar("|")) 'erster Seperator
    3. Form_Buero.Label7.Text = testgesplittet(1)


    Jetzt will ich aber das zerlegen was ich auf der Seriellen Schnittstelle empfange und das versuch ich dann so:

    VB.NET-Quellcode

    1. Dim sstring As String = sInput


    sInput ist so deklariert:

    VB.NET-Quellcode

    1. Public Sub AuswSerialInp(ByVal sInput As String)


    Zusammen sieht das dann so aus:

    VB.NET-Quellcode

    1. Module Module_SerialInput
    2. Public Sub AuswSerialInp(ByVal sInput As String)
    3. Dim sstring As String = sInput
    4. Dim testgesplittet() As String = sstring.Split(CChar("|")) 'erster Seperator
    5. Form_Buero.Label7.Text = testgesplittet(1)
    6. End Sub
    7. End Module


    Und so empfange ich von der Seriellen (Auch erstmal quick and dirty...)

    VB.NET-Quellcode

    1. '//Daten empfangen von der seriellen Schnittstelle
    2. Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    3. SerialInput = SerialPort1.ReadLine()
    4. Me.Invoke(New EventHandler(AddressOf DoUpdate))
    5. End Sub
    6. Public Sub DoUpdate()
    7. AuswSerialInp(SerialInput)
    8. End Sub

    Die Fehlermeldung die dann erscheint habe ich im Anhang gepackt.
    Wäre über jede Hilde sehr dankbar, bin noch voll der Anfänger ,-(

    "
    An

    VB.NET-Quellcode

    1. Module Module_SerialInput
    2. Public Sub AuswSerialInp(ByVal sInput As String)
    3. Dim sstring As String = sInput
    4. Dim testgesplittet() As String = sstring.Split(CChar("|")) 'erster Seperator
    5. Form_Buero.Label7.Text = testgesplittet(1)
    6. End Sub
    7. End Module


    liegt es direkt nicht, habe es getestet. Wie schon Myrax gesagt habt, vllt. gibt

    VB.NET-Quellcode

    1. SerialPort1.ReadLine()


    zu wenig Werte für das Array zurück, was den Fehler erklären würde. Versuche es mal, indem du vor AuswSerialInp(SerialInput) einen Haltepunkt einstellst und dann mit Überwachung, oder mit der Maus einfach drauf, nachzusehen welchen und wieviele Werte SerialInput hat.
    Hi,
    habe jetzt einmal die Überwachung eingeschaltet. Evtl. findet ihr da etwas was falsch ist, ich leider nicht mehr...
    sInput von der Seriellen ist Ordnungsgemäß mit werten gefüllt ("11|22|33|44")




    Nachtrag:
    Ich habe das ganze gerade noch einmal ohne Unterbrechung durchlaufen lassen, da kommt dann diese Meldung:
    Warum steht da jetzt auf einmal "1-" ????



    Abgesehen davon, es wird immer passieren dass der Serielle Input mal nicht aus z.B.: "11|22|33|44" besteht.
    Es kann auch mal nur ein "VBParadiseGleichSuper" drin stehen. Das soll dann halt ignoriert werden, da kein "|"-Trennzeichen gefunden wurde. Wie könnte ich das am Intelligentesten lösen? Vermutlich erschlage ich dann den Fehler damit schon...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Alex0815“ ()

    Das ist eben das Problem mit den Schnittstellen...

    Wie wäre es, wenn du deine Zeichen erst mal in einen String "aufsummierst"
    Indem du die Zeichen einzeln einliest.
    Sobald ein Lineende und/oder Wagenvorlauf-Zeichen kommt, nimmst du diesen
    String und Replaced alle unerwünschten Zeichen.
    Danach kannst du ja dann splitten, oder nach bestimmten Pattern suchen.
    wie wärs mit

    VB.NET-Quellcode

    1. if sinput.contains("|") then
    2. '[...]
    3. End If

    und für die Textbox

    VB.NET-Quellcode

    1. If testgesplittet.Length >= 2 Then
    2. Form_Buero.Label7.Text = testgesplittet(1)
    3. else
    4. Form_Buero.Label7.Text = ""
    5. End If
    So etwas....

    Ich bin gerade auf das Gleiche gekommen:

    VB.NET-Quellcode

    1. If SerialInput.Contains("|") = True Then
    2. AuswSerialInp(SerialInput)
    3. End If


    So habe ich es jetzt gemacht und wollte hier eigentlich nur noch posten das es so klappt...
    Da habe ich deine Post erst gesehen, trotzdem vielen dank!!! Ihr habt mir auf sehr auf die Sprünge geholfen...