Protokolldatei umsortieren

  • Hallo All!

    irgendwie bring ich das nicht hin und bin jetzt völlig frustriert:

    habe etliche Autoit-Programme laufen, die Protokolle gleichen Musters erstellen:
    Beispiel einer muster.log
    20063112105520 Würzburg München Container0815
    20063112110014 Straubing Frankfurt Paket3720
    20070102081537 Basel Dortmund Brief2277


    Die Dateien sind immer nach dem Datumsformat vorne sortiert, als YYYYMMDDmmhhss

    jetzt brauch ich die aber hin und wieder mal nach
    Absender (Würzbug,Straubing, Basel) oder Empfänger (München...) in ner zwoten Datei umsortiert.

    PLEASE HELP

    1000 Dank.

    Gruss

    German

    • Offizieller Beitrag

    Erfasse die Logs mit Delimiter (z.B. "|") in der Form:
    DATUM|ABSENDER|EMPFÄNGER|OBJEKT
    (wenn die vorhandenen Leerzeichen garantiert nur als Trenner auftauchen, kannst du auch diese verwenden)
    Dann kannst du mit StringSplit( ) die Zeile in ein Array auslesen und dann umsortieren.

  • ist man mit dem sortieren in einem Array schneller als im vergleich zum sortierten auslesen aus einer sqlite Datenbank.

    dazu muss ich sagen das ich es selber noch nicht hin bekommen habe ein Array zu sortieren.

  • >Dann kannst du mit StringSplit( ) die Zeile in ein Array auslesen und dann umsortieren.>

    genau hier scheitere ich, mit StringSplit hab ich schon öfters gearbeitet, um mir was umzusortieren (aber bisher nur zeilenweise!!), aber ich bring das Zeug nicht in ein array rein:

    #include <Date.au3>
    #include <string.au3>
    #include <file.au3>
    #include <array.au3>

    $PROTFILE="C:\protokoll\muster.log"

    Dim $lRead
    Dim $tabelle
    _FileReadToArray($protfile, $lRead )

    For $lNum = 1 to $lRead[0]

    $tabelle=StringSplit($lRead[$lNum]," ")

    msgbox(0,"Ziel iss", $tabelle[2],2)

    Next


    =============================

    wir bring ich das ganze in ne Tabelle???

    kann ich irgendwie bei $tabelle noch die Zeilenvariable $lNum mit übergeben???
    dann hätt ich ja
    tabelleZeile1=
    tabelleZeile2=

    Gruss

    German

  • so sollte es gehen:

    [autoit]


    #include <file.au3>
    #include <array.au3>

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

    $PROTFILE=@ScriptDir&"\mylog.log"

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

    Dim $lRead
    _FileReadToArray($protfile, $lRead )
    Dim $tabelle[$lRead[0]][4]
    For $lNum = 1 to $lRead[0]
    $aWerte = StringSplit($lRead[$lNum]," ")
    For $i=1 To UBound($aWerte)-1
    $tabelle[$lNum-1][$i-1]=$aWerte[$i]
    Next
    Next

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

    _ArraySort ( $tabelle , 0, 0, -1, 4 , 2 )
    For $i = 0 To UBound($tabelle,1)-1
    ConsoleWrite($tabelle[$i][0]&" ")
    ConsoleWrite($tabelle[$i][1]&" ")
    ConsoleWrite($tabelle[$i][2]&" ")
    ConsoleWrite($tabelle[$i][3]&@CR)
    Next

    [/autoit]


    für den häufigeren Gebrauch könnte man noch ne kleine UDF draus bauen.

    Einmal editiert, zuletzt von jonk (14. Januar 2007 um 17:55)

  • genau, des isses was ich gebraucht habe, hab gleich rumgetestet und ein paar Kommentierungen erweitert

    1000 Dank, die Badewanne voll Kaffee schieb ich bei Gelegenheit rüber.

    Gruss

    German