Problem mit Split

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Gloem.

    Problem mit Split

    Hallo,

    ich habe ein kleineres Problem mit meiner Split Funktion. Wenn ich die folgende Zeichenfolge mit split auftrennen will erhalte ich zu wenig Felder

    VB.NET-Quellcode

    1. dim test as String = " 2012050401001 4493 32429733.945 5832382.552 27.025 489 160 2 "
    2. Dim values As String() = test.Split({" "}, System.StringSplitOptions.None)


    Hier sollte ein ungefähr 30 Felder großes Array rauskommen.

    Leider werden es bei mir allerdings nur 23. Zum Beispiel läßt er das leere Feld zwischen 4493 und 32429733.945 komplett weg.
    Das Array sollte beginnen mit:
    leer
    leer
    2012050401001
    leer
    leer
    4493
    leer
    32429733.945
    ...

    Es startet aber mit:
    leer
    leer
    2012050401001
    leer
    4493
    32429733.945
    ...

    Hat hier jemand eine Erklärung für?
    Überleg mal:
    Du splittest beim Leerzeichen. Plötzlich sind aber mehrere Leerzeichen vor einem Wort eingetragen.
    Leerzeichen werden hier nicht als String ausgegeben.
    Das heißt, es wird da unterbrochen.
    Was du nehmen solltest ist RegEx (Regular Expressions) und damit solltest du * als Zeichen nehmen, um 0 oder beliebig viele Leerzeichen mit "\s" zu finden.

    Gucke hier: [VB 2008] RegEx Tutorial - Blutige Anfänger und Fortgeschrittene
    @programmer71: Was soll Regex?
    @Gloem: Mach es so:

    VB.NET-Quellcode

    1. Dim test As String = " 2012050401001 4493 32429733.945 5832382.552 27.025 489 160 2 "
    2. Dim values As String() = test.Split({" "}, System.StringSplitOptions.RemoveEmptyEntries)
    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!

    enIking1998 schrieb:

    Einfach aus Trotz
    Glückwunsch, Du hast Deinen Beitragszähler inkrementiert.
    Was wolltest Du uns genau mitteilen?
    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!
    @enIking1998
    Hast du dir den Artikel, den du gepostet hast, überhaupt richtig angeschaut? Dort steht nämlich, dass Split nur eine böse Funktion ist, wenn man die Version aus Microsoft.Visualbasic nimmt. Die richtige Alternative ist String.Split, welche hier gerade verwendet wird. Also nix mit bösen Funktionen.
    Also ich hab gerade mal deinen String oben genau angeschaut und was beim Split rauskommt ist komplett richtig.
    Wenn an jedem Leerzeichen gesplittet wird, dann entstehen am Anfang zwei Leereinträge, da vor dem ersten Leerzeichen "nichts" steht und ebenso zwischen dem ersten und dem zweiten. In der zweiten Lücke entsteht aber nur ein Leereintrag, da nur zwischen den beiden Leerzeichen "nichts" steht, davor oder dahinter aber die Zahlen kommen.

    Mal bildlich dargestellt:
    *nichts* Leerzeichen *nichts* Leerzeichen Zahl Leerzeichen *nichts* Leerzeichen Zahl
    Jedes Lehrzeichen wird nun rausgenommen und übrig bleibt der Rest in Einzelteile zerlegt, also:
    {*nichts*, *nichts*, Zahl, *nichts*, Zahl}

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()