Hilfe bei Logfile aulesen

  • Hallo
    Ich möchte ein Logfile von einem Spiel auslesen also immer die letzte Zeile.
    Hab in der Hilfe Filereadline gefunden und ausprobiert.

    Spoiler anzeigen
    [autoit]

    Local $file = FileOpen("test.txt", 0)

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

    If $file = -1 Then

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

    MsgBox(0, "Error", "Unable to open file.")

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

    Exit

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

    EndIf

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

    While 1

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

    Local $line = FileReadLine($file,-1)

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

    If @error = -1 Then ExitLoop

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

    MsgBox(0, "Line read:", $line)

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

    WEnd

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

    FileClose($file)

    [/autoit]


    Aber leider zeigt mir die MsgBox die Letzte Zeile nonstop also immer die gleiche Zeile bis in der logfile eine neue Zeile geschrieben wird, dann zeigt es die an aber die dann auch nonstop.
    Was kann ich machen das die letzte Zeile nur einmal anzeigt wird bis eine neue Zeile in der Logfile geschrieben wird?

    Einmal editiert, zuletzt von VinceA (11. August 2013 um 10:59)

  • Hallo
    Ich möchte ein Logfile von einem Spiel auslesen also immer die letzte Zeile.


    Warum das? 8|
    --> Forenregeln

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • So?

    [autoit]

    Global $file = FileOpen("test.txt", 0) ;Kann nich Local sein ist auserhalb einer Funktion ;)
    Global $line = "" ;Leer zum vergleichen

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

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    While 1
    $newline = FileReadLine($file, -1)
    If @error = -1 Then ExitLoop
    If $line = $newline Then
    ;Selbe Zeile
    Else
    MsgBox(0, "Line read:", $line)
    $line = $newline ;Schreibt die neue Zeile in die vergleichs Variable
    EndIf
    Sleep(10) ;Damit die CPU nicht auf 99% ist
    WEnd

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

    FileClose($file) ;Macht man so - diese Zeile wird aber in diesem Script nie ausgeführt

    [/autoit]
  • ja super es passt.
    Aber leider wird die Logfile nicht mehr ausgelesen wenn der Server neustartet, dieLogFile wird kommplet neugeschrieben.
    Erst wenn ich das schript dann neustarte wird wieder ausgelesen.
    Ich hab mit ...

    [autoit]

    Run(@ScriptFullPath)

    [/autoit]

    probiert aber leider hängt es sich auf...
    Was kann ich da machen?

    [autoit]

    If $line = $newline Then
    ;Selbe Zeile
    Else

    [/autoit]

    Ach ja was ich nicht so richtig verstehe ist, was meinst mit "Selbe Zeile"?
    $line = $newline?

  • Er meint, dass die Zeile die ausgelesen wurde zu einem früheren Zeitpunkt schon einmal ausgelesen wurde, d.h., dass sich in der Datei nichts geändert hat.
    Diese Konstruktion ist allerdings völlig unnötig, da man auch gleich $line <> $newline als Bedingung hätte nehmen können. Dann würde der leere Teil der Kontrollstruktur wegfallen.