Nutze Anzahl Zeilen eines Arrays als Grundlage für die Wiederholungshäufigkeit einer Schleife

  • Erstmal hallo alle miteinander,

    ich habe ein Problem mit einem Programm, dass ich momentan schreibe.

    Ich möchte zunächst die Anzahl von PDF- Dateien innerhalb eines Ordners ermitteln und das Ergebnis nutzen, um eine Schleife entsprechend oft zu durchlaufen.

    Leider erkennt das Programm dieses jedoch nicht als Zahl. Ich verfüge allerdings auch nicht über Programmiererfahrungen.

    Mein Scrpt sieht bisher folgendermassen aus. Wäre super wenn mir jemand helfen könnte.

    #include <file.au3>
    #include <Array.au3>

    $folder = "C:\Pfad"
    $dir = _FileListToArray($folder, '*.pdf')

    $array= _FileListToArray($folder,$dir,'*pdf')

    $Ergebnis = UBound($array)

    for $x = 0 to $Ergebnis step 1


    MfG

  • Erstmal herzlich Willkommen

    Zu deiner Frage:
    Wenn du von 0 - Ubound gehst hast du einen Durchgang zu viel. Versuch es mal mit *.pdf anstat mit *pdf.

  • Hallo,

    Der Gedankengang ist richtig - Allerdings ist da ein kleiner Fehler:
    Ubound() gibt die Anzahl der Zeilen in einem Array wieder, nicht die Nummer des letzten Elements.

    Bei einem Array mit 10 Zeilen, wäre die erste Zeile #0 und die letzte Zeile #9.
    Richtig wäre also:

    [autoit]


    For $i = 0 To Ubound($aArray) - 1
    ; ...
    Next

    [/autoit]

    _FileListToArray gibt übrigens die Anzahl der Treffer in $aArray[0] aus. Deswegen würde "For $i = 1 To Ubound($aArray) - 1" oder "For $i = 1 To $aArray[0]" beides stimmen.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    $sFolder = @DesktopDir
    ; Besser: Statt $folder, $sFolder verwenden.
    ; so erkennt man direkt, dass es eine String-Variable ist.

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

    $aDir = _FileListToArray($sFolder, '*.pdf')
    ; Hier das gleiche in Grün: $aDir statt $dir für einen Array

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

    ; $array= _FileListToArray($folder,$dir,'*pdf')
    ; Diese Zeile verstehe ich nicht? Willst du auch alle Unterordner
    ; durchsuchen?

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

    For $i = 1 To UBound($aDir) - 1
    ; $i statt $x als Zählervariable in Schleifen. Ist in der
    ; Programmierung allgemein üblich, zuerst $i und dann $j zu belegen.
    ; Und alles was nicht von der "Norm" abweicht verbessert den Lesefluss
    MsgBox(0, "", "Die nächste Datei ist:" & _
    @CRLF & "'" & $aDir[$i] & "'")
    Next

    [/autoit]

    MfG

  • Vielen Dank für die schnellen Antworten!

    Leider hat es noch nicht zum gewünschten Erfolg geführt. Der . vorm pdf hatte keine Änderung bewirkt und auch die andere Anpassung führte zunächst dazu, dass die Schleife gar nicht und nach einfügen von "step" vor -1 lediglich einmalig durchlaufen wird und das Programm dann abbricht.

    Ich dachte, dass AutoIT den Ausdruck Ubound($aArray) nicht als Zahl erkennt und das ich ggfs. etwas schreiben muss wie

    dim $var as Zahl?

    $var = Ubound($aArray)

    for $x to $var step 1

    next

    aber dann gibt es ständig eine Fehlermeldung.

  • Sorry habe das versteckte Skript nicht gesehen... Bin halt nen Neuling :P

    Hat jetzt geklappt! Vielen lieben Dank für die Hilfe.


    Beste Grüße aus Kölle!