Array wird in Schleife nicht abgearbeitet

  • Hallo. Ich habe ein Array in meinem Skript, in dem viele PC-Namen stehen. Ein fester Pfad mit einer Datei drin, deren name des PC-Namen entspricht, soll verarbeitet werden. N

    Nun möchte ich in einer einfachen for-Schleife den Dateinamen in dem Pfad immer ändern, sodass je Schleifendurchgang immer die nächste Datei abgearbeitet wird. Aber das geschieht nicht. Eigentlich ist das ganz einfach, aber das Skript arbeitet immer bloß einen Namen ab.

    Siehe auch nochmal mein Kommentar ziemlich weit oben im Skript

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #Include <File.au3>
    #Include <Date.au3>

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

    dim $druckeruebersicht[2][2]
    Local $var
    yfnrpc()
    ;~ dim $yfnrpc[1] = ["yf7sltpy"]

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

    _arraydisplay($yfnrpc)

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

    for $i = 0 to UBound($yfnrpc) - 1
    $einzulesende_csv = @ScriptDir & "\" & $yfnrpc[$i] & ".csv"
    if FileExists($einzulesende_csv) = 1 Then ;Hier ist das Problem begraben. Ich habe bisher nur eine Testdatei in dem Verzeichnis. Bei jedem Durchgang wird wieder diese Testdatei herangezogen, weil FileExists() jede Datei aus dem Array angeblich findet...


    Global $aCSV
    global $trennzeichen = ","
    Dim $array_komplett[1][1]

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

    _filereadtoarray($einzulesende_csv, $aCSV)

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

    for $i = 3 to ubound($aCSV) - 1
    Dim $aNeuesArray[1]
    Local $spalte = $aCSV[$i]
    while 1
    $erstestrennzeichen = StringInStr($spalte, $trennzeichen) ;Sucht nach der Stelle des nächsten Trennzeichens
    if $erstestrennzeichen Then ;Wenn eins gefunden wurde, dann...
    $aNeuesArray[ubound($aNeuesArray) - 1] = StringLeft($spalte, $erstestrennzeichen - 1) ;wird ein neuer String in das temporäre Array geschrieben. Der String beinhaltet den Inhalt des Strings von dem "großen Array" von der ersten Position bis zu der Position wo das erste Trennzeichen gefunden, minus damit das Trennzeichen selber in das neue Array nicht mit geschrieben wird.
    redim $aNeuesArray[ubound($aNeuesArray) + 1] ;Für den nächsten Inhalt wird eine weitere Zeile dem Array hinzugefügt
    $spalte = StringTrimLeft($spalte, $erstestrennzeichen) ;Für den nöchsten Durchlauf wird der String bis zum ersten Trennzeichen gekürzt
    Else
    _arraydelete($aNeuesArray, ubound($aNeuesArray)) ;Löscht die letzte Zeile des Arrays, die in jedem Durchgang zu viel geschrieben wird
    if ubound($aNeuesArray) > ubound($array_komplett, 2) Then ;Die Anzahl der Spalten in $array_komplett ist abhängig von der Anzahl der Zeilen in $aNeuesArray.
    redim $array_komplett[ubound($array_komplett) + 1][ubound($aNeuesArray)] ;Wenn in $aNeuesArray mehr Zeilen als Spalten in $array_komplett vorhanden sind, so wird die Anzahl der Spalten angepasst.
    Else
    redim $array_komplett[ubound($array_komplett) + 1][ubound($array_komplett, 2)] ;Ansonsten bleibt die Spaltenanzahl gleich, und es wird nur eine neue Zeile angehängt.
    EndIf

    for $a = 0 to ubound($aNeuesArray) - 1 ;Hier werden die Inhalte aus den Zeilen von $aNeuesArray in die Spalten von $array_komplett aufgeteilt
    $array_komplett[ubound($array_komplett) - 1][$a] = $aNeuesArray[$a]
    Next
    ExitLoop
    EndIf
    WEnd
    Next

    ;Col 1 = User
    ;Col 4 = Drucker
    for $b = 1 to ubound($array_komplett) - 1

    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$i]
    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$b][1]


    ;~ for $e = 0 to ubound($druckeruebersicht, 2) - 1
    ;~ MsgBox(1, "lala", "Schleife 2")
    ;~ if stringinstr($druckeruebersicht[ubound($druckeruebersicht) - 1][$e], $array_komplett[$b][4]) Then
    ;~ $var = 1
    ;~ EndIf
    ;~ Next
    ;~ if $var < 1 Then
    ;~
    ;~ ReDim $druckeruebersicht[ubound($druckeruebersicht)][ubound($druckeruebersicht, 2) + 1]
    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][ubound($druckeruebersicht, 2) - 1] = $array_komplett[$b][4]
    ;~ EndIf
    ;~
    ;~


    ;~ if $array_komplett[$b][4] <> $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] Then
    ;~ MsgBox(1, "lala", $array_komplett[$b][4])
    ;~ MsgBox(1, "lala", $druckeruebersicht[ubound($druckeruebersicht) - 1][$e])

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

    ;~ EndIf
    ;~ _arraydisplay($druckeruebersicht)

    Next

    EndIf
    Next

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

    func yfnrpc() ; erstellt ein array "yfnrpc[]" mit allen yf-nr der rechner
    ; es wird auf dem tja nach missing_patches_neu* logdateien gesucht. logdatei = pc = yfnr
    Global $yfnrpc[1]
    Local $search = FileFindFirstFile("\\yf7sltja\log$\missing_patches_neu*") ; suche nach DER ERSTEN missing_patches_neu* datei
    Local $count = 0
    If $search = -1 Then ; errorhandling
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    While 1
    local $file = FileFindNextFile($search) ; suche die NÄCHSTE missing_patches_neu* datei
    If @error Then ExitLoop
    local $yfnr = StringRight ( $file, 8 ) ; lese vom dateinamen nur die letzten 8 zeichen
    _ArrayAdd($yfnrpc, $yfnr)
    $count = $count + 1
    WEnd
    FileClose($search)
    _ArraySwap($yfnrpc[0], $count)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Scritch (29. April 2013 um 16:37)

  • Du benutzt den selben schleifenzähler einfach in Zeile 13 und dann nochmal in Zeile 24, nimm für einen von den beiden mal eine andere Zählervariable