tail und grafische Oberfläche

  • Hallo All!

    weiß, es ist peinlich, mach echt viel mit Autoit, aber meine Programme laufen auf irgendeinem Server ohne Menü und Oberfläche und werden zu 99% von einem bestimmten Produkt aufgerufen (dessen Menüoberfläche ich dann benutzen muss).

    habe versucht ein tail Kommando zu schreiben (für alle Nicht-Unixler) der schaut in ne Datei uns spuckt mit der option -f normalerweise die letzten 20 Zeilen permanent aus (das ist sinnvoll wenn ich mir das Protokoll eines Jobs anschauen will, der stundenlang läuft ich ich mitschauen will, wo ist der gerade.
    Das wollte ich jetzt mit Autoit und Windows-Optik realisieren.

    Autoit-Code ist anbei (einer meiner ersten Versuche mit Oberfläche), das Protokoll unterstelle ich in c:\protokoll, nur heute ist mir das Teil auf einem Produktionsserver 2mal abgeschmiert, bzw. VNC hat nicht mehr gewollt und ich konnte nicht mehr weiterarbeiten.

    Kann da mal ein Experte draufschauen, hab ich da einen haarsträubenden Fehler drin???


    Wie bringt mann den Spoiler rein??

    Gartenzaun und Text Spoiler oder sowas??


    Spoiler anzeigen
    [autoit]

    ; WINTAIL.AU3
    #include <Date.au3>
    #include <string.au3>
    #include <file.au3>
    #include <array.au3>
    #include <GUIConstants.au3>
    $Version="1.00"

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

    $message = "Wähle eine Protokoll-Datei" & $VERSION
    $grepfile = FileOpenDialog($message, "C:\protokoll\", "LOGs (*.log;*.txt;*.prt;*.prot)| Alle Dateien (*.*)", 1 + 2 )

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

    If @error Then
    MsgBox(4096,"","Keine Datei ausgewählt")
    exit
    Else
    $tailfile = StringReplace($grepfile, "|", @CRLF)

    EndIf

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

    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    $mainwindow = GUICreate("Wintail " & $Version & " " & $tailfile, 600, 150)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    $line=_tail($tailfile)
    GUICtrlCreateEdit ($line, 5,5,590,140,$WS_HSCROLL)

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

    ;$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)
    ; GUICtrlSetOnEvent($okbutton, "OKButton")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(2500) ; Häng rum
    ;$Zeit=@HOUR & ":" & @MIN & ":" & @SEC
    $line=_tail($tailfile)

    GUICtrlCreateEdit ($line, 5,5,590,140,$WS_HSCROLL)
    WEnd

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

    Func CLOSEClicked()
    ;Beachte: an diesem Punkt wäre @GUI_CTRLID gleich $GUI_EVENT_CLOSE,
    ;und @GUI_WINHANDLE wäre gleich $mainwindow
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...",1)
    Exit
    EndFunc

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

    Func _tail($PROT)

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

    $gelzeilen=_filecountlines($PROT)
    ; msgbox(0,"gelesene Zeilen", $gelzeilen)

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

    $lesezeile=10
    $startzeile=$gelzeilen - $lesezeile

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

    ; einlesen in ein Array

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

    $tailtext=''
    Dim $aRecords

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

    $l=0

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

    If Not _FileReadToArray($PROT,$aRecords) Then
    ; MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 to $aRecords[0]

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

    if $x >= $startzeile then
    $tailtext=$tailtext & @CRLF & $aRecords[$x]
    EndIf
    ; Msgbox(0,'Record:' & $x, $aRecords[$x],2)

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

    Next

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

    Return($tailtext)
    ; msgbox(0,"nachricht ist", $tailtext)

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

    EndFunc

    [/autoit]

    Edit GtaSpider: [04.10.2007 21:08]
    Spoiler und AutoIt Tags eingefügt
    Aufruf:

    Code
    [SPOILER][AUTOIT]
    AutoIt Code
    [/AUTOIT][/SPOILER]
    • Offizieller Beitrag

    Hallo

    Es könnte sein das VNC abstürzt weil du immer ein Neues Edit erstellst (Zeile 36). Ausserdem habe ich dir mal die Funktion _tail etwas verändert.

    Probier das mal aus:

    Spoiler anzeigen
    [autoit]

    ; WINTAIL.AU3
    #include <Date.au3>
    #include <string.au3>
    #include <file.au3>
    #include <array.au3>
    #include <GUIConstants.au3>
    $Version = "1.00"

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

    $message = "Wähle eine Protokoll-Datei" & $Version
    $grepfile = FileOpenDialog($message, "C:\protokoll\", "LOGs (*.log;*.txt;*.prt;*.prot)| Alle Dateien (*.*)", 1 + 2)

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

    If @error Then
    MsgBox(4096, "", "Keine Datei ausgewählt")
    Exit
    Else
    $tailfile = StringReplace($grepfile, "|", @CRLF)

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

    EndIf

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

    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    $mainwindow = GUICreate("Wintail " & $Version & " " & $tailfile, 600, 150)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    $line = _tail($tailfile)
    $Edit = GUICtrlCreateEdit($line, 5, 5, 590, 140, $WS_HSCROLL)

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

    ;$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)
    ; GUICtrlSetOnEvent($okbutton, "OKButton")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(2500) ; Häng rum
    ;$Zeit=@HOUR & ":" & @MIN & ":" & @SEC
    $line = _tail($tailfile)
    GUICtrlSetData($Edit, $line);Nicht immer neues Edit erstellen sondern einfach Edit updaten mit GuiCtrlSetData!
    ;~ GUICtrlCreateEdit($line, 5, 5, 590, 140, $WS_HSCROLL)
    WEnd

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

    Func CLOSEClicked()
    ;Beachte: an diesem Punkt wäre @GUI_CTRLID gleich $GUI_EVENT_CLOSE,
    ;und @GUI_WINHANDLE wäre gleich $mainwindow
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...", 1)
    Exit
    EndFunc ;==>CLOSEClicked

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

    Func _tail($PROT)
    Local $aRecords = StringSplit(FileRead($PROT), @LF)
    $lesezeile = 10
    $tailtext = ''
    For $i = $aRecords[0]-$lesezeile To $aRecords[0]
    $tailtext &= $aRecords[$i] & @CRLF
    Next
    Return $tailtext

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

    EndFunc ;==>_tail

    [/autoit]

    Hoffe konnte helfen :)

    Mfg Spider

  • hi,

    ich habe mal das prog getestet und mich gewundert, warum ich die letzte zeile einer datei nicht angezeigt bekomme. ich bin irgendwie darauf gekommen, weil ich das letzte ergebnis angezweifelt habe nachdem ich auch den sleep auf 125 gesetzt habe.

    nach ein paar blicken hatte ich es dann.
    $lesezeile = 9 anstatt 10 war die lösung.

    dies nur als hinweis.

    gruss und schönes WE.
    ExBerliner