Datum-Uhrzeiten-String zerlegen

  • Allgemein

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von dolce.

    Datum-Uhrzeiten-String zerlegen

    Hallo Com
    Ich habe eine Zelle (Datentabelle oder Excel) in dieser Form:
    05.05.2011 17:06 11:42 11:42 29.04.2011 20:25 16:06 28.04.2011 18:30 27.04.2011 17:09 17:03 26.04.2011 13:55 20.04.2011 22:11 19.04.2011 20:39

    Nun muss diese so zerlegt werden, dass:
    05.05.2011 17:06
    05.05.2011 11:42
    05.05.2011 11:42
    29.04.2011 20:25
    usw.
    in einer ExcelTabelle abgelegt werden kann.

    Hat jemand eine Idee, wie ich diesen Algorithmus aufzubauen habe!?
    Gibt es Methoden dafür? Split fällt ja aus, da es ja keine eindeutigen Trennzeichen gibt.
    Hat vielleicht jemand solch ein Problem schon gehabt bzw. bei einer ähnlichen Lösung geholfen oder ein solches irgendwo mal gesehen.

    VIELEN DANK im Voraus
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |

    dolce schrieb:

    Split fällt ja aus, da es ja keine eindeutigen Trennzeichen gibt.

    Nein? Komisch, ich sehe da ein Leerzeichen, was die einzelnen Werte trennt ...

    Im Prinzip ist es imho simpel.
    - splitten
    - das erste Element ist immer ein Datum, das zweite immer eine Uhrzeit.
    - wenn das datum den nächsten elements nach "Parse" HEUTE ist, dann handelt es sich um eine Uhrzeit und das aktuelle Datum ändert sich nicht
    - ist das datum NICHT gleich heute, dann setze das aktuelle Datum auf den ermittelten Wert und gehe zum vorigen schritt

    EDIT: Man KANN es natürlich auch einfach über die Länge der Teilstrings machen, aber das wäre mir persönlich zu ... trivial ;)

    VB.NET-Quellcode

    1. Dim sstring As String = "05.05.2011 17:06 29.04.2011 20:25 28.04.2011 18:30 27.04.2011 17:09 26.04.2011 13:55 20.04.2011 22:11 19.04.2011 20:39"
    2. Dim parts As New List(Of String)
    3. For i As Integer = 0 To sstring.Length - 1 Step 17
    4. parts.Add(sstring.Substring(i, CInt(IIf(i + 16 < sstring.Length, 16, sstring.Length - i))))
    5. Next
    6. For Each ssteil In parts
    7. MsgBox(ssteil)
    8. Next
    GOOGLE ist mein Meister :)
    @ Bady: schau mal aufn OriginalString

    @picoflop: kannst Du Deine letzten beiden Anstrichen noch etwas einfacher schreiben, ich kann Dir da nicht recht folgen

    @Bady: Du kannst doch nicht meinen OriginalString abändern und dann was draus machen, das ist MEIN String :D

    @picoflop: danke
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |

    dolce schrieb:

    ich kann Dir da nicht recht folgen

    Machs halt über die länge ...

    s()=split(input)
    nowdate = s(0)
    output(date.parse(nowdate & " " & s(1))
    for i = 2 to s.length-1
    if s(i).length > 5 then
    nowdate = s(i)
    else
    output(date.parse(nowedate & " " & (s(i))
    endif
    next i

    -> Pseudocode. Nur hingerotzt! Nur für die "Idee"!

    das Ergebnis

    So, ich bin ja noch etwas Code schuldig:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub exportExcel()
    2. Dim xlsTableName As String = "Tabelle 1" 'ein Bsp. für TabellenName
    3. Dim xlsApp As New Excel.Application
    4. Dim xlsMappe As Excel.Workbook
    5. Dim xlsTabelle As Excel.Worksheet
    6. Dim xlsIndex As Integer = 2 '2, da Index hier mit 1 loslegt & "Kopfzeile" vorhanden
    7. Dim lfdNr As Integer = 1
    8. xlsMappe = xlsApp.Workbooks.Open(pfadAsString) 'öffnen der vorhandenen ExcelDatei
    9. xlsTabelle = CType(xlsMappe.Worksheets(xlsTableName), Excel.Worksheet)
    10. xlsTabelle.Activate()
    11. For i = 0 To DataTable.Rows.Count - 1 'DataTable durchlaufen & Zellen in Excel übertragen
    12. xlsTabelle.Cells(xlsIndex, DeineSpalte) = CStr(lfdNr) 'laufende Nummer; eine Art gewünschter Index
    13. xlsTabelle.Cells(xlsIndex, DeineSpalte) = DataTable.Rows.Item(i).Item(DeineAuszulesendeSpalte)
    14. 'der Einstieg in das Zerlegen, wenn mehr als Datum+Uhrzeit vorhanden: 01.01.2001 12:12:12 -> macht 19 Zeichen
    15. If CStr(DataTable.Rows.Item(i).Item(DeineAuszulesendeSpalte)).Length > 19 Then 'i übergeordneter SchleifenIndex für das zeilenweise Durchsuchen der DataTable
    16. Dim sa() As String = Split(CStr(DataTable.Rows.Item(i).Item(DeineAuszulesendeSpalte))) 'splitten des gefundenen Strings
    17. For j = 0 To sa.GetUpperBound(0) - 1 'Durchsuchen des sa()
    18. If sa(j).Length > 5 Then '<- ist es ein Datum (Bsp: 02.01.2001 12:13 13:12)
    19. For k = j + 1 To aDU.GetUpperBound(0) 'jetzt ab dem Fund das sa() durchlaufen und die Werte in die ExcelTabelle übertragen
    20. If sa(k).Length > 5 Then Exit For 'natürlich nur so lange, bis wieder ein Datum gefunden wurde
    21. xlsTabelle.Cells(xlsIndex, DeineSpalte) = lfdNr 'laufende Nummer; eine Art gewünschter Index
    22. xlsTabelle.Cells(xlsIndex, DeineSpalte) = DataTable.Rows.Item(i).Item(DeineAuszulesendeSpalte) 'Bsp.-Zelle, die aus der UrsprungsZeile mit übernommen werden soll/muss
    23. xlsTabelle.Cells(xlsIndex, DeineSpalte) = aDU(j) & " " & aDU(k) 'Eintragen des Datum(s) und der Uhrzeit
    24. If k = aDU.GetUpperBound(0) Then Exit For 'wenn das Ende des sa() erreicht, dann verlassen
    25. xlsIndex += 1 'hochzählen des Index innere Schleife
    26. lfdNr += 1 'hochzählen des Index innere Schleife
    27. Next
    28. End If
    29. Next
    30. Else
    31. xlsTabelle.Cells(xlsIndex, DeineSpalte) = DataTable.Rows.Item(i).Item(DeineAuszulesendeSpalte) 'OriginalZelle mit einfach Datum+Uhrzeit: 01.01.2001 12:12:12
    32. End If
    33. xlsIndex += 1 'hochzählen des Index äußere Schleife
    34. lfdNr += 1 'hochzählen des Index äußere Schleife
    35. Next
    36. xlsApp.DisplayAlerts = False
    37. xlsMappe.SaveAs(pfadAsString)
    38. xlsMappe.Close()
    39. xlsApp.Quit()
    40. End Sub



    Bei mir funktioniert der Algorithmus.
    Ich hoff es hilft dem einen oder anderen bei einem solchen oder ähnlichen Problem weiter.

    Gibt es Verbesserungsvorschläge, dann immer her damit, denn ich lern gern dazu!

    DANKE noch mal an pico :thumbup:
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |