Daten in ein Array - filtern - Ergebnis in Liste ausgeben

  • Hi,
    ich will ein Script machen, welches mir Dateien auf einem Ordner in ein Array schreibt.
    Dann wird das Seitenverhältnis der jpg-Dateien verglichen.
    Bis hierher funktioniert es.

    Weicht dies von 1,5 (15x10) ab, so sollen alle Bilder, bei denen es nicht stimmt in ein neues Array aufgelistet werden. (geht nicht)

    Mein bisheriges Script

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    #include "image_get_info.au3"

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

    Dim $TreeViewItems[50]

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

    #include <GuiListView.au3>
    #include <GUIConstants.au3>

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

    GUICreate("listview items",220,250, 100,200,-1,$WS_EX_ACCEPTFILES)
    $button = GuiCtrlCreateButton ("Beenden",75,170,70,20)
    $listview = GuiCtrlCreateListView ("Bild|Verhältnis",10,10,200,150);,$LVS_SORTDESCENDING)

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

    $Pfad = "D:\Test\"
    $untergrenze = "1.48"
    $obergrenze = "1.52"
    $FileList = _FileListToArray($Pfad, "*.jpg")
    If @Error=1 Then
    MsgBox (0,"","Ordner nicht vorhanden")
    Exit
    EndIf
    If @Error=4 Then
    MsgBox (0,"","Keine Dateien vorhanden")
    Exit
    EndIf
    ;_ArrayDisplay($FileList,"$FileList")

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

    For $i = 1 To UBound($FileList)-1

    $aInfo = _ImageGetInfo($Pfad & $FileList[$i])
    $width = _ImageGetParam($aInfo, "Width")
    $height = _ImageGetParam($aInfo, "Height")

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


    If $width < $height Then
    $format = $height / $width
    ElseIf $width > $height Then
    $format = $width / $height
    Else
    EndIf

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

    If $format > $untergrenze Then
    Else
    ;MsgBox (0,"Foto " & $FileList[$i], "Falsches Format " & Round($format, 3))
    $fehler = 1
    EndIf

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

    If $format < $obergrenze Then
    Else
    ;MsgBox (0,"Foto " & $FileList[$i], "Falsches Format " & Round($format, 3))
    $fehler = 1
    EndIf

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

    GUICtrlCreateTreeViewItem($Pfad & $FileList[$i], $listview);$TreeViewItems[$i] =
    Next
    ;GUISetBkColor (0x00E0FFFF) ; will change background color

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

    ;$item1=GuiCtrlCreateListViewItem($TreeViewItems[$i] & "|col22",$listview)
    ;$item1=GuiCtrlCreateListViewItem($TreeViewItems[$i] & "|col22",$listview)
    ;$item2=GuiCtrlCreateListViewItem($TreeViewItems[$i] & "|col12",$listview)
    ;$item3=GuiCtrlCreateListViewItem($TreeViewItems[$i] & "|col32",$listview)
    ;GuiCtrlSetState(-1,$GUI_ACCEPTFILES) ; to allow drag and dropping
    GuiSetState()
    ;GUICtrlSetData($item2,"|ITEM1",)
    ;GUICtrlSetData($item3,"||COL33",)
    ;GUICtrlDelete($item1)

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

    Do
    $msg = GuiGetMsg ()

    Select
    Case $msg = $button
    MsgBox(0,"listview item",GUICtrlRead(GUICtrlRead($listview)),2)
    Case $msg = $listview
    MsgBox(0,"listview", "clicked="& GuiCtrlGetState($listview),2)
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Mittlerweile ist es etwas durcheinander.
    Damit es einfacher ist versuche ich erstmal alle Elemente des array in eine GUI mit Spalten zu bekommen.
    Oder einer weiß gleich, wie ich alle Dateien auflisten kann, bei denen die Bedingung (kleiner als 1,48 oder größer 1,52 erfüllt ist)

    Leider will es nicht :lol:
    Es werden einfach keine Daten in die GUI übernommen :hammer:

  • Kann´s nicht im Detail checken, aber was mir aufgefallen ist:

    1. In Zeile 54:

    [autoit]

    GUICtrlCreateTreeViewItem($Pfad & $FileList[$i], $listview);$TreeViewItems[$i] =

    [/autoit]

    Das sollte ein ListViewItem sein oder Du machst aus Zeile 12 GUICreateTreeView, aber so passt das wohl nicht.

    2. Wenn Du alle Items auflisten willst, solltest Du die in Arrays für die TreeView/ListView lesen und ausgeben. ungefähr so:

    [autoit]

    $listviewitem[$i] = GuiCreateListViewItem(...)

    [/autoit]

    Kann sein, dass ich das nicht richtig verstehe. Kann Dein Script nicht ausführen, da mir die Funktion image_get_info.au3 fehlt.

    3. Ich denke, wenn 1 und 2 geklärt sind, ergibt sich Dein Problem von selbst. Die Prüfung sieht für mich auf den ersten Blick ganz schlüssig aus.

    Gruß

    Chris

  • Danke unearth

    Genau dies war mein Fehler. Habs nun doch schneller geschafft als ich gedacht hatte. War mein erstes Script mit einem GUI

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    #include "image_get_info.au3"
    #include <GuiListView.au3>
    #include <GUIConstants.au3>

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

    $Standard = "D:\Test\"

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

    GUICreate("Falsches Dateiformat!",330,200,100,200,-1,$WS_EX_ACCEPTFILES)
    $button = GuiCtrlCreateButton ("Beenden",130,170,70,20)
    $listview = GuiCtrlCreateListView ("Bild|Verhältnis Ist|Verhältnis Soll",10,10,310,150, $LVS_SORTDESCENDING)
    _GUICtrlListViewSetColumnWidth ($listview, 0, 100)
    _GUICtrlListViewSetColumnWidth ($listview, 1, 90)
    _GUICtrlListViewSetColumnWidth ($listview, 2, 90)

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

    $Pfad = FileSelectFolder("Bitte den Pfad auswählen", "" ,"", $Standard) & "\"
    $untergrenze = 1.48
    $obergrenze = 1.52
    $FileList = _FileListToArray($Pfad, "*.jpg")

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

    If @Error=4 Then
    MsgBox (0,"falscher Ordner?","Keine Dateien vorhanden")
    Exit
    EndIf

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

    For $i = 1 To UBound($FileList)-1
    $fehler = 0
    $aInfo = _ImageGetInfo($Pfad & $FileList[$i])
    $width = _ImageGetParam($aInfo, "Width")
    $height = _ImageGetParam($aInfo, "Height")

    If $width < $height Then
    $format = $height / $width
    ElseIf $width > $height Then
    $format = $width / $height
    Else
    EndIf

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

    If $format > $untergrenze Then
    Else
    $fehler = 1
    EndIf

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

    If $format < $obergrenze Then
    Else
    $fehler = 1
    EndIf

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

    IF $fehler = 1 Then
    GUICtrlCreateListViewItem($FileList[$i] & "|" & Round($format, 3) & "|1,5", $listview)
    Else
    EndIf
    Next

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

    GuiSetState()

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

    Do
    $msg = GuiGetMsg ()
    Select
    Case $msg = $button
    EXIT
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Gibt es eigentlich die Möglichkeit auch Unterordner mit in das Array einzubeziehen?

  • Freut mich, dass Du jetzt weiterarbeiten kannst.

    Zum neuen Problem:
    _FileListToArray ist jetzt nicht mein Spezialgebiet, aber spontan würde ich eine Abfrage der Ordner machen, also mit $iFlag auf 2 gesetzt und für diese dann wieder jeweils eine weitere _FileListToArray For...Next-Abfrage. Sollten da auch wieder Unterordner sein, wiederum das selbe Schema anwenden.

    Wird aber dadurch schon ein wenig aufwändiger. Ist aber Deine Sache oder Freizeit ;)

  • unearth
    Hört sich kompliziert an. Das ist es mir dann doch nicht wert :hammer:

    @th.meger
    Wo find ich denn die. Was kann ich damit anstellen?