Textstellen Formatierung

  • Hey Leute, ich steh vor folgendem Problem:

    Ich hab mir meinen Whatsapp-Verlauf als txt-Datei gesichert allerding ist alles relativ unformatiert und ich bin jetzt auf der suche, bzw dabei nen skript zu schreiben das mit alle einließt und anschließend wie gewünscht formatiert. Ich komm einfach nich weiter, bze finde keinen Ansatz.

    So sieht die Datei momentan aus:
    "01.12.2012, 23:45 - Name Nachname: Nachricht101.12.2012, 23:46 - Name Nachname: Nachricht201.12.2012, 23:47 - Name Nachname: Nachricht3 ......."

    Ziel:
    "01.12.2012, 23:45 - Name Nachname: Nachricht1
    01.12.2012, 23:46 - Name Nachname: Nachricht2
    01.12.2012, 23:47 - Name Nachname: Nachricht3 "

    Hat jemand ne Ahnung wie man das am Besten hinbekommt?

    Gruß Timo

  • Hi,

    also so kriegst du schonmal die einzelnen Datum/Zeit-Angaben raus:

    [autoit]

    $str = "01.12.2012, 23:45 - Name Nachname: Nachricht101.12.2012, 23:46 - Name Nachname: Nachricht201.12.2012, 23:47 - Name Nachname: Nachricht3"

    [/autoit][autoit][/autoit][autoit]

    $cnt = StringLen($str)

    [/autoit][autoit][/autoit][autoit]

    for $i = 1 to $cnt
    if StringMid($str,$i,1) = "." and StringMid($str,$i+3,1) = "." and StringMid($str,$i+8,1) = "," Then
    $split1 &= StringMid($str,$i-2,17) & @CRLF
    EndIf
    Next

    [/autoit]

    Jetzt musst du die nur noch irgendwie durch ein @CRLF ersetzen, dann splitten und dann die beiden Arrays aneinander reihen ;)

    Klingt kompliziert? Isses auch! :D (oder auch nicht :P)

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Hier gibt es sicher viele verschiedene Lösungen. Mein Vorschlag wäre folgender:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $hFile=FileOpen(@ScriptDir& '\whatsAppNew.txt',2)
    $sText = FileRead(@ScriptDir & '\whatsApp.txt')
    $aText = StringSplit($sText, ',')
    Global $a2D[$aText[0]][3]
    For $i = 1 To $aText[0]
    If $i < $aText[0] - 1 Then
    $aText[$i] = StringRight($aText[$i], 10) & StringTrimRight($aText[$i + 1], 10)
    ElseIf $i < $aText[0] Then
    $aText[$i] = StringRight($aText[$i], 10) & StringStripWS($aText[$i + 1], 7)
    EndIf
    Next
    _ArrayDelete($aText, $aText[0])
    $aText[0] -= 1
    ;_ArrayDisplay($aText)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aText[0]
    $aSplit = StringSplit($aText[$i], '-')
    If $aSplit[0] > 1 Then
    $a2D[$i][0] = $aSplit[1]
    $aSplit = StringSplit($aSplit[2], ':')
    If $aSplit[0] > 1 Then
    $a2D[$i][1] = $aSplit[1]
    $a2D[$i][2] = $aSplit[2]
    EndIf
    EndIf
    FileWriteLine($hFile,$a2D[$i][0]&'-'&$a2D[$i][1]&':'&$a2D[$i][2])
    Next
    FileClose($hFile)
    $a2D[0][0]=$aText[0] & " / Datum Zeit"
    $a2D[0][1]="Name"
    $a2D[0][2]="Nachricht"

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($a2D)
    ShellExecute(@ScriptDir& '\whatsAppNew.txt')

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Edit: Ausgabe des Arrays in Datei eingefügt.

    mfg autoBert

    2 Mal editiert, zuletzt von autoBert (8. März 2013 um 17:38)

  • Spoiler anzeigen
    [autoit]

    $a="01.12.2012, 23:45 - Name Nachname: Nachricht101.12.2012, 23:46 - Name Nachname: Nachricht201.12.2012, 23:47 - Name Nachname: Nachricht3 ......."

    [/autoit] [autoit][/autoit] [autoit]

    $b=StringRegExpReplace($a,'(\d{2}).(\d{2}).(\d{4})',@crlf &'$1.$2.$3')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $b = ' & $b & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]

    meine bescheidenen Regex-Kenntnise reichen gerade noch dafür aus^^

    Kurze Erklärung:
    Das Datum tt.mm.jjjj (also 2 Ziffern, Punkt, 2 Ziffern, Punkt, 4 Ziffern) wird gesucht und durch @crlf tt.mm.jjjj ersetzt