follow-Funktion aus less

  • Hallo

    wie kann man mit Autoit die Follow-Funktion von LESS nachstellen?
    Wer LESS (Follow-Mode) nicht kennt: z.B. eine Logdatei beobachten, jede neu Zeile wird sofort angezeigt.
    Ich nutze LESS hauptsächlich mit der Windowsupdate.log

    Gruß und Danke

    2 Mal editiert, zuletzt von energy98 (14. April 2009 um 16:40)

  • Das geht z.B. so:

    Interne
    [autoit]

    #include<WinAPI.au3>
    $MyFile = FileOpen(@DesktopDir&"\test.txt" ,0)

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

    Local $text = ""

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

    While 1

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

    While 1
    $text &= FileRead($MyFile)
    If @error < 0 Then ExitLoop
    If @error > 0 Then Exit

    ToolTip($text)
    WEnd

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

    Sleep(500)
    WEnd

    Func OnAutoItExit()
    FileClose($MyFile)
    EndFunc

    [/autoit]
    WinAPI
    [autoit]

    #include<WinAPI.au3>
    $MyFile = _WinAPI_CreateFile(@DesktopDir&"\test.txt" ,2,2,7)

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

    Local $text = ""

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

    Dim $Buffer = DllStructCreate("char[1024]"), $read

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

    While 1

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

    While 1
    If Not _WinAPI_ReadFile($MyFile,DllStructGetPtr($Buffer),1024,$read) Then
    _WinAPI_CloseHandle($MyFile)
    Exit
    EndIf
    If $read=0 Then ExitLoop
    $text &= StringLeft(DllStructGetData($Buffer,1),$read)
    ToolTip($text)
    WEnd

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

    Sleep(500)
    WEnd

    Func OnAutoItExit()
    _WinAPI_CloseHandle($MyFile)
    EndFunc

    [/autoit]


    Das überwacht die test.txt auf dem Desktop

  • Eigentlich eine Supersache, nur leider funktioniert es nicht mit meinem LOG-File (liegt derzeit bei 1,2 M Chr).
    Das Problem liegt wohl in der Standardzuweisung für die Variable "$text", diese kann nicht mehr als 30.000 Chr aufnehmen, wie kann man dies höher setzen?
    Ein String sollte 2,1G Chr können oder ... aber wie deklariert man einen String?

    Ein Frage nach am Rande, sind haben "&=" und "+=" ich habe daszu nichts gefunden?

    Danke und Grüsse

  • Also 2,1G werden es nie werden und brauchen werden ich die letzten ca. tausend Zeilen.

    Also nochmal die Frage, wie bekommt ich in eine Variable "$text" z.B. 40.000 Character?

    Gruss

  • Jetzt haben sich doch noch ein paar Fragen aufgetan:

    1.)
    Kann man den in einem String verwendeten Speicher, wieder freigeben?
    2.)
    Wie kann ich den String im "GUICtrlCreateEdit" durchsuchen, über einen INPUT (oder STRG+F) und wie würde "Highlight'en" funktionieren?

  • nach was willst du denn genau durchsuchen? einer bestimmten zeichenfolge? einem bestimmten wort? ein bisschen genauer...

    • Offizieller Beitrag

    Zu 1.: Ich weiß nicht genau wie AutoIt die Garbage-Collection handhabt, aber ich denke, wenn Du der Variablen einen Leerstring zuweist, sollte der Speicher wieder freigegeben werden.

    Zu 2.: Mit GUICtrlRead das Editfeld auslesen und dann mit StringInStr nach der Zeichenfolge suchen. Highlighten müsste mit _GUICtrlEdit_SetSel machbar sein.