_ArrayBinarySearch

  • Hi,


    ich habe ein sehr kurze Verständnisfrage und habe nach dem Befehl ArrayBinarySearch hier schon gesucht, fand jedoch keine passende Lösung:


    Ich habe 2 Verzeichnisse. Eines mit Originaldateien, das andere mit geänderten Kopien. Ich möchte ein kleines Script welches beide Verzeichnisse einliest und diese Dateien miteinander vergleicht, jene welche im Kopieordner fehlen sollen irgendwie ausgegeben werden. Ich wollte es einfach über ArrayBinarySearch realisieren, weil ich dachte da alle Dateien gleich formatiert sind kann ich eine for schleife schreiben die jeden einzelnen Wert zurückgibt. Aber irgendwie klappts nicht. Als Wert bekomme ich entweder immer die "1" wieder, oder "-1" als Fehler. Hier ist mein Script:


    [autoit]

    #include <File.au3>
    #Include <Array.au3>
    $orpfad = "C:\PSADMIN"
    $kopfad = "C:\kopie"
    $ordateien = _FileListToArray($orpfad)
    $kodateien = _FileListToArray($kopfad)

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

    _ArraySort($ordateien)
    _ArraySort($kodateien)
    ;_ArrayDisplay($ordateien)
    For $i = 1 to $ordateien
    $ausgabe = _ArrayBinarySearch($kodateien,$ordateien[5])

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

    ConsoleWrite($ausgabe)

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

    Next

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


    Handelt es sich hier um ein reines Verständnisproblem oder was läuft hier falsch?

    Für jeden Tip bin ich dankbar!

    Einmal editiert, zuletzt von lordrobe (14. Mai 2008 um 16:15)

  • in der Schleife $i anstatt 5 nehmen. Du musst ja eine Schleife machen


    Xeno, vielen Dank, leider habe ich das nur im geposteten Quelltext vergessen herauszunehmen, da ich temporär die Schleife auskommentiert habe um eine einzelne Abfrage zu machen, leider auch ohne Erfolg. Die Ausgabe die ich durch ConsoleWrite($abfrage) mache sieht so aus: -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
    [EDIT ]

    moment, -1, also gibt er immer Fehler aus! Aber was sagt der Fehler aus? 8|

    Das würde bedeuten, dass der gesuchte Wert immer in der ersten Zeile des Arrays ist oder? Mein Array sieht aber so aus:


    Ordateien =

    [0]16
    [1]CTL3D.DLL
    [2]DEISL1.ISU
    [3]ENV.ENV
    [4]IMPPRO20.VBX
    [5]IPXDLL.DLL
    [6]NWCALLS.DLL
    [7]NWIPXSPX.DLL
    [8]NWLOCALE.DLL
    [9]NWNET.DLL
    [10]NWPSRV.DLL
    [11]PCTREE16.DLL
    [12]PRNTYPE.DAT
    [13]PSADMIN.EXE
    [14]PSWINDSP.DLL
    [15]SSPP20.VBX
    [16]THREED.VBX


    kodateien =

    [0]14
    [1]CTL3D.DLL
    [2]DEISL1.ISU
    [3]ENV.ENV
    [4]IMPPRO20.VBX
    [5]IPXDLL.DLL
    [6]NWCALLS.DLL
    [7]NWIPXSPX.DLL
    [8]NWLOCALE.DLL
    [9]NWNET.DLL
    [10]NWPSRV.DLL
    [11]PCTREE16.DLL
    [12]PRNTYPE.DAT
    [13]PSADMIN.EXE
    [14]PSWINDSP.DLL

    2 Mal editiert, zuletzt von lordrobe (14. Mai 2008 um 15:50)

    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    #include<File.au3>
    $orpfad = "C:\"
    $kopfad = "C:\"
    $ordateien = _FileListToArray($orpfad)
    $kodateien = _FileListToArray($kopfad)

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

    _ArrayDelete($kodateien, 1) ;Random(1, UBound($kodateien)-1, 1))
    _ArrayDelete($kodateien, 1) ;Random(1, UBound($kodateien)-1, 1))

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

    _ArrayDisplay($ordateien)
    _ArrayDisplay($kodateien)

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

    For $i = 1 To UBound($ordateien) - 1
    $ausgabe = _ArraySearch($kodateien, $ordateien[$i])
    If @error Then
    ConsoleWrite('!' & $ordateien[$i] & ' nicht in Kopie enthalten' & @CRLF)
    Else
    ConsoleWrite('>' & $ordateien[$i] & ' in Kopie enthalten' & @CRLF)
    EndIf
    Next

    [/autoit]

    Edit : :)

    Mega

  • Hallo Xeno, danke für deine superschnelle Antwort,

    leider funktioniert das nicht so richtig. Er listet ALLE Dateien auf und sagt die Datei ist nicht enthalten, ergo, gibt er bei jeder abfrage ein "-1" zurück. Obwohl der das Maximal nur 2x machen dürfte (Es fehlen im Beispiel nur 2 Dateien).

    ...

    [Edit]

    Dank Xeno, nun funktionierts (mit deinem Editierten Text).

    Noch eine ganz kurze Frage:

    Mit _ArrayDelete($kodateien, 1) lösche ich da den Indexwert? Also die "14" oder "16" ? Oder lösche ich den zweiten Eintrag? Ich dachte immer ein Array beginnt mit [0]

    Danke trotzdem nochmal! :)