Array vorher Löschen ??

  • Hey,

    habe eine problem ich erzeuge eintrage in einer listview aber wenn ich diese fuktion öfter hintereinander nutze gibt er mir doppelte werte raus?
    Kann sowas am array liegen??
    Habe auch schon Sleep zwischen gesetzt leider ohne erfolg
    Hat jemand eine idee?

    [autoit]

    Func check()
    _GUICtrlListView_DeleteAllItems($ListView2)
    $ListViewText = _GUICtrlListView_GetItemTextArray($ListViewhost)
    if @error then Return
    Ping($ListViewText[1], 1) ; Host anpingen
    If Not @error Then
    $TSUSER = RunWait(@ComSpec & " /c " & @SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & "\" & $ListViewText[1] & '.log', "", @SW_HIDE)
    ConsoleWrite(@SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & "\" & $ListViewText[1] & '.log')
    Sleep(1000)
    _FileReadToArray(@SystemDir & '\' & $ListViewText[1] & '.log', $aIn)

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

    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWs($aIn[$i],7)," ","|",5)
    Next
    ;FileWriteFromArray("C:\serverts_out.txt",$aIn,2)
    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($ListViewText[1] & '|' & $aIn[$i], $listview2)

    ;$item1 = GUICtrlCreateListViewItem($aIn[$i], $listview2)

    Next

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

    EndIf
    EndFunc

    [/autoit]

    Hier die Datei:
    autoit.de/wcf/attachment/5661/

    Die ausgabe soll so sein:
    Serverxx|user_000211|rdp-tcp#122|2|Aktiv|4|05.08.2009 06:17
    serverxx|group_0013rdp-tcp#123|3|Aktiv|2:41|05.08.2009 06:59


    Danke SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    3 Mal editiert, zuletzt von subzero007 (11. August 2009 um 10:23)

  • Ich hab mir jetzt dein Script nicht angesehen, sondern nur deinen Text schnell mal überflogen.

    Um dopplungen zu vermeiden gibts in der neuen Version den Befehl

    [autoit]

    _ArrayUnique

    [/autoit]
  • Und wie würde ich:

    [autoit]

    _ArrayUnique

    [/autoit]


    in meinem script einsetzen??

    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (6. August 2009 um 19:46)

    • Offizieller Beitrag

    Kannst du dein ganzes Script posten? Es ist schwer allein an der Funktion etwas nachzuvollziehen.

  • Hi subzero,
    hab mich mal durch dein Schript gekämpft.
    Ich glaube, wir hätten dein Problem schon vor 3 Tagen komplett gelöst, wenn du dir nicht immer die Würmer aus der Nase ziehen lassen würdest.
    Diese mit Verlaub gesamte Listview-sch*** zieht sich nun schon durch mehrere Threads. Kotz dich aus und dir wird geholfen! Aber ich und auch andere hier brauchen dazu eine KLARE ANSAGE!
    D.h. Beschreibung von dem was du hast (serverts-files, logfiles, einfach alles was du hast) und auch sehr wichtig, wo du AM ENDE hinwillst! Beschreib einfach mal in 5-10 Sätzen, was mit den Daten in den Logs im Endeffekt passieren soll. Sonst drehen wir uns weitere 3 Tage im Kreis^^
    ciao
    Andy

  • Hey,
    ok hier was ich vorhabe_:

    Ich will wissen und auswerten wer alles auf einem terminal server angemeldet ist..(Funktioniert bereits leider wenn ich mehrer server hintereinander auswerte kommen doppelte einträge)
    Ich will den server für anmeldung sperren.(Funktioniert bereits)
    Ich will den server für anmeldung entsperren.(Funktioniert bereits)
    Ich will die anmeldung Disconecten und resseten können .(Funktioniert bereits)
    Nachricht an einen oder mehrer user auf dem terminal server verschicken(funktioniert)

    Hier mein Code:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=TS-Manager.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiListView.au3>
    #include <Array.au3>
    #include <File.au3>

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

    #Region ### START Koda GUI section ### Form=

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

    $Form1_1 = GUICreate("TSManger", 850, 650, 231, 154)
    GUISetBkColor(0xA6CAF0)
    $ListViewhost = GUICtrlCreateListView("Hostname", 32, 32, 170, 430)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
    ;$ListView2 = GUICtrlCreateListView("Hostname|BENUTZERNAME|SITZUNGSNAME|KENNUNG STATUS|LEERLAUFZEIT|ANMELDEZEIT", 224, 32, 564, 430)
    $ListView2 = GUICtrlCreateListView("Hostname|BENUTZERNAME|SITZUNGSNAME|KENNUNG|STATUS|LEERLAUFZEIT|ANMELDEZEIT", 224, 32, 580, 430)

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

    $Hostladen = GUICtrlCreateButton("Hostladen", 32, 14, 75, 17, $WS_GROUP)
    $Search = GUICtrlCreateButton("Check", 32, 464, 75, 17, $WS_GROUP)
    ;$Searchall = GUICtrlCreateButton("Check All", 32, 480, 75, 17, $WS_GROUP)
    $Reset = GUICtrlCreateButton("Reset", 224, 464, 75, 17, $WS_GROUP)
    ;$resetall = GUICtrlCreateButton("Reset-all", 224, 480, 75, 17, $WS_GROUP)
    $Disconnect = GUICtrlCreateButton("disconnect", 305, 464, 75, 17, $WS_GROUP)
    ;$disconnectall = GUICtrlCreateButton("disconnect-all", 305, 480, 75, 17, $WS_GROUP)
    $MSG = GUICtrlCreateButton("MSG", 480, 482, 75, 17, $WS_GROUP)
    $MS = GUICtrlCreateButton("MSG-All", 560, 482, 75, 17, $WS_GROUP)
    $stop = GUICtrlCreateButton("Stop", 125, 14, 75, 17, $WS_GROUP)
    ;$Export = GUICtrlCreateButton("Export", 614, 464, 75, 17, $WS_GROUP)

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

    $Laden = GUICtrlCreateButton("LADEN", 695, 480, 75, 17, $WS_GROUP)
    $logonenable = GUICtrlCreateButton("Logonenable", 32, 497, 75, 17, $WS_GROUP)
    $Logondisable = GUICtrlCreateButton("Logondisable", 32, 511, 75, 17, $WS_GROUP)
    $Edit1 = GUICtrlCreateEdit("", 480, 500, 300, 133)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $aIn[1]
    While 1

    _install()
    Sleep(20)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Hostladen
    _Load()
    case $Laden
    msg()
    Case $Search
    _GUICtrlListView_DeleteAllItems($ListView2)

    Sleep(1000)
    check()

    case $Disconnect
    _disconnect()

    Case $Reset
    _reset()
    Case $logonenable
    _enable()
    Case $Logondisable
    _dis()

    Case $MSG
    _msgsend()

    Case $ms
    _msgsendall()


    EndSwitch
    WEnd

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

    func _msgsendall()

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

    $aSel = _GUICtrlListView_GetSelectedIndices($ListView2, True)
    For $i = 1 To $aSel[0]
    $var1 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 1)
    $var2 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 0)
    ; MsgBox(0, "", $var1 & @CRLF & $var2)
    $TSMSG = Run(@ComSpec & " /c " & @SystemDir & '\msg.exe * /server:' & $var2 & ' ' & GuiCtrlRead($Edit1) & '', "", @SW_HIDE)

    Next
    EndFunc

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

    Func _dis()
    $ListViewText = _GUICtrlListView_GetItemTextArray($ListViewhost)
    Ping($ListViewText[1], 100) ; Host anpingen
    If Not @error Then
    Run(@ComSpec & " /c " & @SystemDir & '\psexec.exe \\' & $ListViewText[1] & ' change logon /disable', "", @SW_HIDE)
    EndIf
    EndFunc

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

    Func _enable()
    $ListViewText = _GUICtrlListView_GetItemTextArray($ListViewhost)
    Ping($ListViewText[1], 100) ; Host anpingen
    If Not @error Then
    Run(@ComSpec & " /c " & @SystemDir & '\psexec.exe \\' & $ListViewText[1] & ' change logon /enable', "", @SW_HIDE)
    EndIf
    EndFunc

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

    Func msg()
    GuICtrlSetData($Edit1, "")
    $var = FileOpenDialog("", @ScriptDir & "\", "Text (*.txt)", 1 + 4 ) ; hat schon gestimmt aber :
    $txt = FileRead($var) ; Die Ausgewählte datei mus erst gelesen werden
    GuICtrlSetData($Edit1, $txt)

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

    EndFunc

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

    func _msgsend()
    $aSel = _GUICtrlListView_GetSelectedIndices($ListView2, True)
    For $i = 1 To $aSel[0]
    $var1 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 1)
    $var2 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 0)
    ;MsgBox(0, "", $var1 & @CRLF & $var2)
    $TSMSG = Run(@ComSpec & " /c " & @SystemDir & '\msg.exe '& $var1 & ' /server:' & $var2 & ' ' & GuiCtrlRead($Edit1) & '', "", @SW_HIDE)
    ConsoleWrite(@ScriptDir & '\msg.exe '& $var1 & ' /server:' & $var2 & GuiCtrlRead($Edit1))
    Next

    EndFunc

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

    Func check()

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

    $ListViewText = _GUICtrlListView_GetItemTextArray($ListViewhost)
    if @error then Return
    Ping($ListViewText[1], 1) ; Host anpingen
    If Not @error Then
    $TSUSER = RunWait(@ComSpec & " /c " & @SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & "\" & $ListViewText[1] & '.log', "", @SW_HIDE)
    ConsoleWrite(@SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & "\" & $ListViewText[1] & '.log')
    Sleep(1000)
    _FileReadToArray(@SystemDir & '\' & $ListViewText[1] & '.log', $aIn)

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

    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWs($aIn[$i],7)," ","|",5)
    Next
    ;FileWriteFromArray("C:\serverts_out.txt",$aIn,2)
    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($ListViewText[1] & '|' & $aIn[$i], $listview2)

    ;$item1 = GUICtrlCreateListViewItem($aIn[$i], $listview2)

    Next

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

    EndIf
    EndFunc

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

    func _ErsetzeLeerzeichenDurchPipe($zeile)
    $zeile=stringstripws($zeile,4) ;alle aufeinanderfolgenden leerzeichen auf eins reduzieren
    if stringleft($zeile,1)=" " then $zeile=stringtrimleft($zeile,1) ; erstes leerzeichen löschen
    $zeile=stringreplace($zeile," ","|",5) ; leerzeichen mit pipes ersetzen
    return $zeile
    endfunc

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

    Func _Load() ; Datenbank-Datei laden
    _GUICtrlListView_DeleteAllItems($ListViewhost) ; Das Handle eben noch bestimmen (s. Anfang des Threads)

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

    Local $sItem
    $FileOpenDialog = FileOpenDialog("Pc Liste Wählen", @ScriptDir & "\", "Pc Liste (*.txt;*.csv)", 1 + 4)
    Local $hFile = FileOpen($FileOpenDialog, 0) ; Datei zum lesen öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($ListViewhost) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $ListViewhost) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($ListViewhost) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>_Load

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

    Func _disconnect()
    $aSel = _GUICtrlListView_GetSelectedIndices($ListView2, True)
    For $i = 1 To $aSel[0]
    $var1 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 2)
    $var2 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 0)
    ;MsgBox(0, "", $var1 & @CRLF & $var2)
    $TSDIS = Run(@ComSpec & " /c " & @SystemDir & '\tsdiscon.exe '& $var1 & ' /server:' & $var2, "", @SW_HIDE)
    ConsoleWrite(@SystemDir & '\tsdiscon.exe '& $var1 & ' /server:' & $var2)
    Next
    EndFunc


    Func _disconnectall()
    For $i = 0 To _GUICtrlListView_GetItemCount($Listview2) -1;hier zählst du die einträge
    $var1 = _GUICtrlListView_GetItemText($ListView2, $i, 2)
    $var2 = _GUICtrlListView_GetItemText($ListView2, $i, 0)
    $TSDISall = Run(@ComSpec & " /c " & @SystemDir & '\tsdiscon.exe '& $var1 & ' /server:' & $var2, "", @SW_HIDE)

    Next

    EndFunc

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

    Func _reset()
    $aSel = _GUICtrlListView_GetSelectedIndices($ListView2, True)
    For $i = 1 To $aSel[0]
    $var1 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 2)
    $var2 = _GUICtrlListView_GetItemText($ListView2, $aSel[$i], 0)
    ;MsgBox(0, "", $var1 & @CRLF & $var2)
    $TSREST = Run(@ComSpec & " /c " & @SystemDir & '\reset.exe session '& $var1 & ' /server:' & $var2, "", @SW_HIDE)


    Next

    EndFunc

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

    Func _install()
    FileInstall('F:\autoit\entwicklung\ts\msg.exe', 'c:\windows\system32\msg.exe')
    FileInstall('F:\autoit\entwicklung\ts\psexec.exe', 'c:\windows\system32\psexec.exe')
    FileInstall('F:\autoit\entwicklung\ts\regapi.dll', 'c:\windows\system32\regapi.dll')

    FileInstall('F:\autoit\entwicklung\ts\change.exe', 'c:\windows\system32\change.exe')
    FileInstall('F:\autoit\entwicklung\ts\query.exe', 'c:\windows\system32\query.exe')
    FileInstall('F:\autoit\entwicklung\ts\quser.exe', 'c:\windows\system32\quser.exe')
    FileInstall('F:\autoit\entwicklung\ts\reset.exe', 'c:\windows\system32\reset.exe')
    FileInstall('F:\autoit\entwicklung\ts\tsdiscon.exe', 'c:\windows\system32\tsdiscon.exe')

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

    EndFunc

    [/autoit]

    Das einzige Problem was ich noch habe ist, die einträge in meiner listview die Doppelt erscheinen, wenn ich gleich hintereinander die Fuc _check() ausführe.
    wenn ich aber jedesmal das Programm Schliesse und nur einmal das jeden server einzeln auslese dann ist alles ok. ich will ja aber nicht bei jedem terminal server auslessen
    die applikation neustarten.

    so soll die ausgabe in der listview sein:

    Die ausgabe soll so sein:
    Serverxx|user_000211|rdp-tcp#122|2|Aktiv|4|05.08.2009 06:17
    serverxx|group_0013rdp-tcp#123|3|Aktiv|2:41|05.08.2009 06:59

    Hier die datei die ich verarbeite um es in der listview darzustellen:
    autoit.de/wcf/attachment/5669/

    Würde mich über jede hilfe freuen:

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hallo,
    sehr schönes Script!!!
    Die "doppelten" Einträge kommen nicht vom Array sondern von deiner Log-Datei. Das kommt daher, daß mit dem ">" das Ergebnis von Query.exe immer an die Logdatei hintendran gehängt wird. Kann das leider zzt nicht testen, daher mal ein Schuss ins blaue^^
    Lösche diese Datei ( sollte Listviewtext[1]&".log" sein) bevor du query.exe aufrufst. Zeile 137
    ciao
    Andy

    Edit.: Sorry, war quatsch. "Normalerweise" wird mit einer Ausgabeumleitung per ">" die Datei überschrieben, ">>" hängt an.....hmmmm

    Edit2: habe dein Script jetzt zum laufen bekommen, statt der Logdatei benutze ich die von dir angegebene serverts.txt, damit klappts einwandfrei, also check mal die Logdatei, die von query.exe erstellt wird

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (7. August 2009 um 10:03)

  • Hey,
    Andy habe auch schon versucht für jeden server eine datei erzeugt also und die daten die mein Query erzeugt sind ok,
    Hast du noch eine idee wo der fehler liegen könnte?

    PS:sehr schönes Script!!! ist das dein ernst oder ironisch gemeint ich wurde noch nie wegen mein Script hier gelobt ;)
    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hallo,
    kann dein Problem nicht nachvollziehen, bei mir funktioniert es ohne Duplikate. Habe keinen TS am laufen aber query.exe bastelt eine Datei mit mir als User auf der Console.
    Füge mal direkt nach dem runwait() ein EXIT ein und prüfe dann die Logdatei. Kann es sein, daß andere Programme diese Logs verwenden?

    Ausserdem solltest du dir in einer ruhigen Minute mit einer Kanne Kaffee (eine Tasse wird nicht reichen^^) mal diesen Thread verinnerlichen Tutorial zur Fehlersuche

    ciao
    Andy

  • So,
    an der datei liegt es nicht alles einzelnt geprüft mein bauchgefühl sagtr mir das es am array liegt
    habe was von Prog@ndy gefunden entweder klappt es damit auch nicht oder ich ruffe es falsch auf:

    so jetzt zu meiner frage ist die _ArrayEmpty($aIn[0]) aufruf in meiner func check() richtig??


    [autoit]

    Func check()

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

    $ListViewText = _GUICtrlListView_GetItemTextArray($ListViewhost)
    if @error then Return
    FileDelete(@SystemDir & '\ts.log')
    Ping($ListViewText[1], 1) ; Host anpingen
    If Not @error Then
    $TSUSER = RunWait(@ComSpec & " /c " & @SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & '\ts.log', "", @SW_HIDE)
    ;Sleep(5000)
    ConsoleWrite(@SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & '\ts.log' & @crlf)

    _FileReadToArray(@SystemDir & '\ts.log', $aIn)

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

    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWs($aIn[$i],7)," ","|",5)

    Next
    ;FileWriteFromArray("C:\serverts_out.txt",$aIn,2)
    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($ListViewText[1] & '|' & $aIn[$i], $listview2)
    _ArrayEmpty($aIn[0])
    ;$item1 = GUICtrlCreateListViewItem($aIn[$i], $listview2)

    Next

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

    EndIf
    EndFunc

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

    Func _ArrayEmpty(ByRef $array)
    ; Prog@ndy
    If Not isArray($array) Then Return SetError(1,0,0)
    Switch UBound($array,0)
    Case 1
    Dim $array[UBound($array,1)]
    Case 2
    Dim $array[UBound($array,1)][UBound($array,2)]
    Case 3
    Dim $array[UBound($array,1)][UBound($array,2)][UBound($array,3)]
    Case Else
    Return SetError(2,0,0)
    EndSwitch
    Return 1
    EndFunc

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hast du mit _Arraydisplay() nachgesehen ob überhaupt doppelte Einträge vorhanden sind.
    Vergleiche mal den ersten Durchlauf (der ja funktioniert?) mit dem zweiten.
    So ganz klar ist mir das Problem auch nicht. ?(

  • [autoit]

    $TSUSER = RunWait(@ComSpec & " /c " & @SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & '\ts.log', "", @SW_HIDE)
    ConsoleWrite(@SystemDir & '\query.exe user /server:' & $ListViewText[1] & " > " & @SystemDir & '\ts.log' & @crlf)
    ;also wenn HIER ein exit steht und dann die Logfiles in Ordnung sind muss der Fehler ja später auftauchen
    _FileReadToArray(@SystemDir & '\ts.log', $aIn) ;definitiv wird $aIn gelöscht und NUR mit den Daten des logs gefüllt, das habe ich geprüft
    _arraydisplay($ain) ;stimmt hier noch alles?

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

    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWs($aIn[$i],7)," ","|",5)
    Next

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

    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($ListViewText[1] & '|' & $aIn[$i], $listview2)
    _ArrayEmpty($aIn[0]) ;du löschst das array nach der Liste , kannst du weglassen imho
    Next

    [/autoit]
  • Ich kanns nicht nachvollziehen...
    Mach mal in die case-Anweisung (zeile 60 um die dreh) NACH dem _check()-Aufruf eine Messagebox, um das Script dort zu stoppen und schau die Liste an.
    Dann beschreib GENAU was du tust und wie die Liste aussieht!

    Also ich gehe so vor:
    - prog starten
    - Host laden
    - Host in liste auswählen
    - CHECK-Button drücken
    - Liste ist OK
    - CHECK-Button drücken
    - Liste ist OK
    - CHECK-Button drücken
    - Liste ist OK
    - anderen Host laden
    - CHECK-Button drücken
    - Liste ist OK
    - CHECK-Button drücken
    - Liste ist OK
    uswusf

  • So,
    jetzt zum ergebeniss
    log datei geprüft alles richtig.

    und habe mal ein:

    [autoit]

    _arraydisplay($ain)

    [/autoit]


    Gemacht:
    und siehe da array werte Falsch : und mein text file leer da kein user angemeldt ;)

    [0]|10
    [1]|BENUTZERNAME|SITZUNGSNAME|KENNUNG|STATUS|LEERLAUFZEIT|ANMELDEZEIT
    [2]|userc|rdp-tcp#748|6|Aktiv|5:52|06.08.2009 05:29
    [3]|userd|rdp-tcp#776|9|Aktiv|.|06.08.2009 20:34
    [4]|userf|rdp-tcp#778|5|Aktiv|1|07.08.2009 06:02
    [5]|userg|rdp-tcp#780|2|Aktiv|3:54|07.08.2009 06:13
    [6]|userm|rdp-tcp#788|1|Aktiv|1|07.08.2009 11:13
    [7]|usert|rdp-tcp#790|4|Aktiv|23|07.08.2009 12:02
    [8]|uservvv|rdp-tcp#791|8|Aktiv|24|07.08.2009 12:28
    [9]|usern|rdp-tcp#792|7|Aktiv|9|07.08.2009 13:05
    [10]|user|rdp-tcp#793|10|Aktiv|31|07.08.2009 13:07

    Ich wollte mich nochmal offiziel bei euch allen bedanken für eure hilfe
    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Also wenn es jetzt klappt, ist es ja schön^^
    Änderungsvorschlag:
    Wenn CHECK aufgerufen wird, bevor ein User aus der Liste ausgewählt ist, tritt ein Fehler auf, das könntest du in der case CHECK() bei zeile 60 abfangen

  • Hey,
    da habe ich mich wohl falsch ausgedrück
    ja ich habe den fehler gefunden weiss aber nicht wie ich den behebe??

    Mein array ist falsch und die datei ist leer???
    ich vermute er nimmt das allte arry wenn die datei leer ist??
    Bin ja nicht so fit drin aber ist meiner vermutung eine idee?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Nein die Log datei ist richtig die ist leer!
    Und wenn ich eine leere datei habe kommt er zu einem fehler und nicmmt den inhalt vom array vom vorgänger,
    also muss ich das irgendwie abfragen weiss aber nicht wie, oder ich muss mein array löschen??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Aha. Ja soweit warn wir doch schon fast :D

    [autoit]

    Func check()

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

    _FileReadToArray(@ScriptDir & '\' & 'serverts.txt', $aIn) ; deine .txt datei
    _ArrayDisplay($aIn)
    _ArrayEmpty($aIn)
    _FileReadToArray(@ScriptDir & '\' & 'test.log', $aIn) ;leere .log datei
    _ArrayDisplay($aIn)

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

    Func _ArrayEmpty(ByRef $array)
    ; Prog@ndy
    If Not isArray($array) Then Return SetError(1,0,0)
    Switch UBound($array,0)
    Case 1
    Dim $array[UBound($array,1)]
    Case 2
    Dim $array[UBound($array,1)][UBound($array,2)]
    Case 3
    Dim $array[UBound($array,1)][UBound($array,2)][UBound($array,3)]
    Case Else
    Return SetError(2,0,0)
    EndSwitch
    Return 1
    EndFunc
    EndFunc

    [/autoit]
  • funktioniert das?

    [autoit]

    _FileReadToArray($ListViewText[1] & '.log', $aIn)

    If @error = 0 Then ;kein fehler
    _ArrayDisplay($aIn)
    For $i = 1 To $aIn[0]
    $aIn[$i] = StringReplace(StringStripWS($aIn[$i], 7), " ", "|", 5)
    Next
    For $i = 2 To $aIn[0] ; bei Index 2 starten, dann ist die erste Zeile weg
    $item1 = GUICtrlCreateListViewItem($ListViewText[1] & '|' & $aIn[$i], $ListView2)
    Next
    Else
    MsgBox(0, "Fehler!", "Fehler beim Öffnen der Datei " & $ListViewText[1] & '.log')
    EndIf

    [/autoit]