Brauche Hilfe bei dem "Spliten" eines Strings

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RobinMa.

    Brauche Hilfe bei dem "Spliten" eines Strings

    Hallo liebe Community,

    ich bin neu hier und hoffe das ihr mir weiterhelfen könnt. Wahrscheinlich ist die Antowrt total easy nur ich bin zu unerfahren in VB. Also hier mein Problem ich habe folgenden String:

    "5.000","560.671","2774.555176","106.804253","0.000000","0","7.668123","-0.124833","0.186881","-42.160633","86.507934","0.000000","0.000000","0.000000","-34.252228","-62.946640","62.162693"
    "5.100","560.858","2766.813477","106.565941","0.000000","0","8.249795","-0.210257","0.067246","-42.160633","82.539684","0.000000","0.000000","0.000000","-37.851170","-63.114376","62.010254"
    "5.200","561.049","2765.903809","106.334648","0.000000","0","8.808711","-0.191465","0.254633","-43.625183","82.539684","0.000000","0.000000","0.000000","-41.267799","-63.279362","61.838276"
    "5.300","561.244","2769.425049","106.103081","0.000000","0","9.357085","-0.228203","0.019191","-42.368832","84.126985","0.000000","0.000000","0.000000","-46.862309","-63.440857","61.642582"
    "5.400","561.443","2776.671143","105.875153","0.000000","0","9.955027","-0.285123","0.280527","-41.331253","84.920633","0.000000","0.000000","0.000000","-45.507015","-63.597160","61.422455"
    "5.500","561.643","2759.756592","105.648445","0.000000","0","10.573355","-0.089172","-0.440370","-36.472061","81.746030","0.000000","0.000000","0.000000","-42.743111","-63.746090","61.177452"
    "5.600","561.845","2710.893066","105.417015","0.000000","0","11.184001","-0.104688","-0.100751","-29.574238","73.809522","0.000000","0.000000","0.000000","-31.372002","-63.889732","60.909531"

    Nun sind zum Beispiel nur die Sekunde 5,2 bis 5,4 relevant.Wie schaffe ich das dann nur die Zeilen, die bei oder zwischen diesen Werten liegen in meiner Richtextbox angezeigt werden? Zudem sollte er allerdings sehr schnell sein, da manche Textdateien bis zu 20000 Zeilen haben. Ich habe es bereits mit dem Code versucht:

    VB.NET-Quellcode

    1. Richtextbox1.Text = ""5.000","560.671","2774.555176","106.804253","0.000000","0","7.668123","-0.124833","0.186881","-42.160633","86.507934","0.000000","0.000000","0.000000","-34.252228","-62.946640","62.162693"
    2. "5.100","560.858","2766.813477","106.565941","0.000000","0","8.249795","-0.210257","0.067246","-42.160633","82.539684","0.000000","0.000000","0.000000","-37.851170","-63.114376","62.010254"
    3. "5.200","561.049","2765.903809","106.334648","0.000000","0","8.808711","-0.191465","0.254633","-43.625183","82.539684","0.000000","0.000000","0.000000","-41.267799","-63.279362","61.838276"
    4. "5.300","561.244","2769.425049","106.103081","0.000000","0","9.357085","-0.228203","0.019191","-42.368832","84.126985","0.000000","0.000000","0.000000","-46.862309","-63.440857","61.642582"
    5. "5.400","561.443","2776.671143","105.875153","0.000000","0","9.955027","-0.285123","0.280527","-41.331253","84.920633","0.000000","0.000000","0.000000","-45.507015","-63.597160","61.422455"
    6. "5.500","561.643","2759.756592","105.648445","0.000000","0","10.573355","-0.089172","-0.440370","-36.472061","81.746030","0.000000","0.000000","0.000000","-42.743111","-63.746090","61.177452"
    7. "5.600","561.845","2710.893066","105.417015","0.000000","0","11.184001","-0.104688","-0.100751","-29.574238","73.809522","0.000000","0.000000","0.000000","-31.372002","-63.889732","60.909531""
    8. Dim anfuehrungszeichen as String = Label1.Text 'Welches das Anführungszeichen als Text enthält
    9. Dim index as Integer = 1
    10. Dim gesuchtestartsekunde as String = 5.200
    11. Dim gesuchteendsekunde as String = 5.400
    12. Dim aktuellesekunde as string = ""
    13. Do until aktuellesekunde = gesuchtestartsekunde
    14. aktuellesekunde = Richtextbox1.Text.Split(anfuehrungszeichen)(index)
    15. index += 34 'da jede Zeile 34 Anführungszeichen enthält.
    16. If aktuellesekunde = gesuchtestartsekunde Then
    17. Richtextbox1.Text = Richtextbox1.Text.Replace (aktuellesekunde, "#")
    18. End if
    19. Loop
    20. index = 0
    21. Do until aktuellesekunde = gesuchteendsekunde
    22. aktuellesekunde = Richtextbox1.Text.Split(anfuehrungszeichen)(index)
    23. index += 34 'da jede Zeile 34 Anführungszeichen enthält.
    24. If aktuellesekunde = gesuchteendsekunde Then
    25. Richtextbox1.Text = Richtextbox1.Text.Replace (aktuellesekunde, "*")
    26. End if
    27. Loop
    28. RichTextbox1.Text = Richtextbox1.Text.Split("#")(1)
    29. RichTextbox1.Text = Richtextbox1.Text.Split("*")(0)



    Warum ich ihn nicht einfacher schreibe hat seinen Hintergrund, dieser ist aber sehr kompliziert zu verstehen. Der Code funktioniert auch prenzipiell, nur wenn die gesuchte Sekunde in der 20000 Zeile ist, dauert es ca. 20 Sekunden bis er jede einzeln abgleicht. Also brauch ich ein schnelleren Code.


    Wenn ihr irgendetwas habt dann bitte helft mir. Ich hänge seit Wochen an dieser Stelle fest.

    Grüße Robin :)
    Vergiss mal die Richtextbox, die ist nämlich - grad was Performance angeht - ziemlich unzureichend.

    Erklär mal, was du überhaupt bezwecken willst.
    Mir sieht das aus, als wollest du Werte aus einer Text-Datei einlesen.

    Aber wozu?
    Diese Frage ist wichtig, denn wenn man was einliest, muss man eine Idee haben, wo man es hinein-lesen will.

    sonst gleicht man einem, der Wasser holen geht, ohne zu überlegen, ob er einen Eimer, eine Flasche oder einen Kanister mitnehmen will.
    Oke also statt einer Richtextbox einfach einen String verwenden?

    Es geht darum das dieser Code zu jeder zehntel Sekunde Renndaten ausspuckt (Geschwindigkeit, Motortemperatur, usw.). Diese Daten sollen dann rundenweise in eine Grafik (Chart) eingetragen werden. Schlussendlich soll man am eine Runde auswählen können und das entsprechende Diagramm mit den Daten angezeigt bekommen.

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

    Also ich frag nochmal neu, was du hast, und was du willst.

    Ich nehme mal an, du hast eine Datei, wo diese Zahlen-Wüsten drinne stehen.
    Und aus dieser Datei willst du einen Abschnitt anzeigen.

    Ich vermute, es handelt sich um Messwerte.
    Die erste Zahl jeder Zeile scheint einen Mess-Zeitpunkt anzugeben, die weiteren sind offsichtlich Fließkommazahlen, könnten Double sein.
    Wenn die Anzahl der Zahlen pro Zeile immer gleich ist, dann ist das eine Tabelle, und das kann man sehr wunderbar in ein typisiertes Dataset einlesen, und in einem DatagridView anzeigen.
    Aber dazu müsstest du erstmal bestätigen, ob es sich um eine Tabelle handelt.

    Eine weitere Frage ist auch, ob es mehrere solcher Dateien gibt. Aber vlt. erstmal bis hier her. Also nochmal die Fragen:
    1. Liegt eine Datei vor, die einzulesen ist?
    2. Handelt es sich bei den Zahlen um Fließkomma-Werte?
    3. Ist die Anzahl der Zahlen pro Zeile immer gleich?
    4. Gibt es mehrere solcher Dateien?