Die ersten X Zeilen (an oberster Stelle stehend) in einer Text Datei löschen

  • Hallo zusammen,

    irgendwie stehe ich auf dem Schlauch und komme trotz (intensiver) Recherche nicht so recht weiter.
    Daher meine Frage hier ....

    Problem:

    Ich habe eine Textdatei (ein automatisch generiertes LOG-File) welches alle 10 min um genau 5 Zeilen vergrössert wird.
    Diese Zeilen werden jeweils ans Ende des Files geschrieben und haben immer denselben Aufbau.

    Bsp.
    ********************
    autom. check
    Date: 20.07.2010
    Status: OK
    ********************

    Jetzt hätte ich gerne das nach Ablauf von 24 h (= 144 x 5 Zeilen = 6 Einträge / Std. x 24), die jeweils ältesten 5 Zeilen,
    also die, die am Anfang der Datei stehen, gelöscht werden.


    Ich habe es mit StringReplace probiert, was aber nicht zum gewünschten Erfolg geführt hat.
    Mit FileSetPos kann zwar an den Anfang des Files 'springen' - aber das mit dem Löchen funktioniert nicht so recht.

    Kann es hilfreich sein das File in ein Array einzulesen und dieses dann entsprechend ab Pos6 in ein File zu schreiben ?


    Danke schon einmal im voraus

    ugt100 8)

    Einmal editiert, zuletzt von ugt100 (20. Juli 2010 um 15:36)

  • [autoit]

    $sText = "Zeile1" & @CRLF & "Zeile2" & @CRLF & "Zeile3" & @CRLF & "Zeile4" & @CRLF & "Zeile5" & @CRLF & "Zeile6" & @CRLF & "Zeile7"

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

    ; Möglichkeit 1:

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

    $sText_Neu = StringReplace($sText, StringLeft($sText, StringInStr($sText, @CRLF, 0, 5) + 1), "")
    MsgBox(0, "Mit StringReplace", $sText_Neu)

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

    ; Möglichkeit 2:
    Local $aSplit = StringSplit($sText, @CRLF, 3), $sText_Neu
    For $i = 5 To UBound($aSplit) - 1
    $sText_Neu &= $aSplit[$i] & @CRLF
    Next
    MsgBox(0, "Mit StringSplit (Arrays)", $sText_Neu)

    [/autoit]
  • Hi 'Schrubber', hi 'SEuBo,
    danke für die schnellen Antworten !!! Wie immer einfach super das Forum !!!

    Ich habe die Lösungen jeweils getestet - alle funktionieren soweit.
    Allerdings habe ich es dann noch auf einem anderen Weg gelöst:

    anbei der 'entscheidende' Scriptteil:

    [autoit]


    $File = @ScriptDir & "\xyz.log"
    $File1 = @ScriptDir & "\123.log"

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

    $CountLines = _FileCountLines($File)
    If $CountLines > 60 Then
    $aVar1 = _FileReadToArray($File, $aRecords)
    _FileWriteFromArray($file1, $aRecords,6)
    FileMove($file1,$File,1)
    Endif

    [/autoit]


    Wobei ich jetzt nicht sagen kann, ob das temp. Erzeugen eines Files 'professionell' ist.
    Aber es funktioniert und da die Files letztlich nicht gross sind, gibt es kein Zeitproblem

    Danke an alle

    Gruss
    ugt100 :thumbup: