Timespan.Parse Problem

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Timespan.Parse Problem

    Guten Tag,

    Ich hab ein kleines Problem! Komischerweise hatte ich mal den selben Code in einem anderen Programm, aber dort funktioniert alles hevorragend - also wirklich 1 zu 1 gleich :S
    Und nun funktioniert dieser im neuen Programm gar nicht mehr ...

    Es handelt sich hierrum:

    VB.NET-Quellcode

    1. For Each line As String In blablub
    2. Dim Uhrzeit As TimeSpan = TimeSpan.Parse(Split(line, "]")(0).Replace("[", ""))
    3. ' ...
    4. Next


    blablub:
    [12:01:23] Dies und das
    [12:01:24] Das und dies
    usw...

    Also im Grunde hat man dann "12:01:23" als String und dies soll dann in TimeSpan rein.

    Als Fehlermeldung zeigt er mir an: Die Eingabezeichenfolge hat das falsche Format.


    Bloß frag ich mich jetz nur, wieso funktioniert, denn der GENAU selbe Code im anderen Programm? Das andere Programm greift sogar auf die selbe Datei zu ...

    Danke im vorraus!
    Schreib Befehle, die mal lesen kann.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim txt As String = "[12:01:23] Dies und das"
    3. Dim parts() As String = txt.Split("]"c)
    4. Dim txt2 As String = parts(0).Replace("[", "")
    5. 'MessageBox.Show(txt2)
    6. Dim Uhrzeit As TimeSpan = TimeSpan.Parse(txt2)
    7. MessageBox.Show(Uhrzeit.ToString)
    8. 'Dim Uhrzeit2 As DateTime = DateTime.Parse(txt2)
    9. 'MessageBox.Show(Uhrzeit2.ToString)
    10. End Sub
    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!
    Oder gleich richtig mit RegEx

    VB.NET-Quellcode

    1. Dim rx As New RegEx("[(?<time>\d{2}:\d{2}:\d{2})+]")
    2. Dim m As Match = rx.Match("[12:34:23] bla bla")
    3. If m.Success Then
    4. MessageBox.Show(m.Group("time").ToString())
    5. Else
    6. MessageBox.Show("Time konnte nicht gefunden werden")
    7. End If


    Glaube so müsste das funktionieren.
    Oke, ich habe grad gemerkt das meine Datei Leerzeilen enthält, wodurch er einfach "" versucht in Zeit umzuwandeln... *facepalm*

    Das mit RegEx sieht ja ziemlich interessant aus 8|
    Wie ich das richtig erkenne filtert diese Funktion die Zeit nach einem bestimmten Schema heraus?


    PS: Mit meiner Funktion funktioniert es nun doch einwandfrei ^^ Und das RegEx werd ich mir mal genauer unter die Lupe nehmen ^^

    Danke für euere Hilfe :D
    Klar, es gibt viele Wege nach Rom, auch mit SubString würde es funktionieren, ebenso könntest du mit einer Schleife jeden Buchstaben druchgehen, das "[" suchen, ab da beginnen einen String zusammen zu setzten aus den folgenden Buchstaben, solange bis das "]" erreicht wird.

    Aber all diese Mechanismen sind ggf unperfomant und du bekommst nicht sicher das von dir gewünscht Ergebnis, wenn z.B. mal Zweizeiliger Text is mit [ und ] drin. Mit RegEx stellst du eine Regel auf, befindet sich diese im String, hast du aufjedenfall das richtige Format.

    \d prüft auf Zahlen und {2} heißt das es genau 2 Zeichen sein müssen, in diesem Fall also genau 2 Zahlen, getrennt durch ein Doppelpunkt und in Eckigen Klammern soll gesucht werden.

    RegEx is ein schwieriges Pflaster, aber wenn man es erstmal kann, kommt viel schönerer Code bei raus als was bei dir momentan zu sehen ist, das nur schrecklich und nicht wirklich gut Nachvollziehbar auf den ersten Blick.