Uhrzeit & Datum aus Zeitstempel auslesen, übrige Zeichen entfernen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Uhrzeit & Datum aus Zeitstempel auslesen, übrige Zeichen entfernen

    Hallo Leute,

    hab mal wieder etwas schwieriges :D

    Ich bekomme einen Zeitstempel ausgelesen der in etwa so aussieht: "abc 24.05.14 18.19.30 timestamp def"

    Das Problem ist leider, dass vor dem Datum und nach timestamp noch irgendwelche variablen Zeichen (hier mir "abc" und "def" dargestellt) mit ausgegeben werden. Im Prinzip möchte ich aber nur das Datum und die Uhrzeit haben und in einem Label ausgeben. Der ganze andere Kram soll gelöscht werden.

    Hoffe jemand hat einen Ansatz.

    Lt.Winters schrieb:

    Ansatz
    Wenn die Zeichenfolge "timestamp" Bestandteil des Strings ist, such danach mit txt.IndexOf("timestamp") das Ende und such von da rückwärts LastIndexOf() das 3. Leerzeichen. Da hast Du den Start.
    Feddich. :D
    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!
    Deinen Ansatz verstehe ich, hab ich aber ehrlich gesagt nicht hinbekommen. Daher habe ich mich jetzt für RegEx entschieden, da scheiter ich aber gerade am Muster.

    VB.NET-Quellcode

    1. Dim UhrzeitSuchen As String
    2. Dim UhrzeitAusgelesen As String
    3. UhrzeitSuchen = RichTextBox2.Lines.ToList.FindIndex(Function(item) item.ToLower.Contains("timestamp".ToLower)).ToString 'Nach timestamp suchen
    4. UhrzeitAusgelesen = RichTextBox2.Lines(UhrzeitSuchen) 'Ganze Zeile ausgeben
    5. Dim pattern As String = ">?timestamp" 'hier bekomme ich das Muster nicht hin, um zwischen > und timestamp zu suchen. Das ">"-Zeichen ist ein fester Bestandteil des Strings, genauso wie "timestamp".
    6. Dim input As String = UhrzeitAusgelesen
    7. Label18.Text = Regex.Match(input, pattern).ToString()
    Wenn "abc" nur ein Wort ist (ohne Leerzeichen), dann einfach nach " " splitten und im 1-3'ten Index sind deine gewünschten Elemente


    oder

    du gehst jeden buchstaben einzelnd durch und wenn eine Zahl gefunden wird, fängst du an "mitzuschneiden" (halt mit ner Start Variable für den Start-Index) bis ein Buchstabe gefunden wird (dort ist dann End-Index) und dann einfach mit SUBString() rausschneiden.
    Also ganz genau wird das hier ausgegeben: "irgendeintext> 24.05.14 18.19.30 timestamp irgendeintext"

    Jetzt würde es sich doch anbieten den String zwischen ">" und "timestamp" zu nehmen. Dann wäre ich doch am Ziel. Nur hier scheitert es am RegEx-Muster. :/
    Falls es mal jemanden interessieren sollte, die Lösung sieht mit RegEx so aus:

    VB.NET-Quellcode

    1. Try
    2. Dim UhrzeitSuchen As String
    3. Dim UhrzeitAusgelesen As String
    4. UhrzeitSuchen = RichTextBox2.Lines.ToList.FindIndex(Function(item) item.ToLower.Contains("timestamp".ToLower)).ToString 'Nach timestamp suchen
    5. UhrzeitAusgelesen = RichTextBox2.Lines(UhrzeitSuchen) 'Ganze Zeile ausgeben
    6. Dim pattern As String = "(?<=>).*(?=timestamp)" 'RegEx-Muster
    7. Dim input As String = UhrzeitAusgelesen
    8. Label18.Text = Regex.Match(input, pattern).ToString() 'String ausgeben in Label
    9. Catch ex As Exception 'Abfangen von Exception
    10. MsgBox("Auslesefehler - Abfragewerte konnten nicht vollständig ausgelesen werden.", MsgBoxStyle.Critical, "Fehler")
    11. End Try
    das geht eleganter.
    guck den gesuchten Text doch mal an: Die Zeit hat 1 Space, dann 2 Digits, dann 1 '.', 2 Digits, '.', 2 Digits, ' ', 2 Digits, '.', 2 Digits '.', 2 Digits, ' timestamp'
    Das kann man recht einfach komplett regexen, sodass du den Regex gleich auf den ganzen Text anwenden kannst - glaub mit
    " (\d\d\.\d\d\.\d\d\ \d\d\.\d\d\.\d\d) timestamp"
    vom Match müssteste dann die zweite Gruppe abrufen (also das eingeklammerte)

    VB.NET-Quellcode

    1. Label18.Text = Regex.Match(RichTextBox2.Text, pattern).Groups(1).Value
    ungetestet

    Falls du Regexe testen willst: RegexTester