Auf doppelte Dateien überprüfen

  • Liebe Community,

    ich habe eine Platte mit ca. 30.000 Musiktiteln. Leider sind auch toppelte Musiktittel dabei ... .

    Die werden immer
    "Depeche Mode - Blablabla Bla [Deluxversion] (Voice Digital 123](1).mp3"
    "Depeche Mode - Blablabla Bla [Deluxversion] (Voice Digital 123](2).mp3"
    angezeigt und ich will die löschen.

    Ich habe alle Dateien in einem riesigen Array gespeichert, dass klappt ganz gut.
    Aber jetzt bekomm ich beim Vergleichen Bammel:
    Jede einzelene Datei würde ich nun via Regex mit den anderen 30.000 Dateien auf Duplikate vergleichen - das wären dann 900 Millionen vergleiche!

    Wie lässt sich das realisieren?

    Schönen 1. Mai,

    euer mille

    Einmal editiert, zuletzt von mille86 (12. Mai 2011 um 20:14)

  • Evtl kannst du die letzten Zahlen (also (1)) wegmachen und dann durch StringInStr überprüfen ob der Titel woanders schon drinsteht (damit erspart man sich das wegmachen von (2)). Das alles in einer doppelten For Schleife, also so ungefähr:

    [autoit]

    For $i = 0 to Ubound ($aTitel) -1
    For $t = 0 to Ubound ($aTitel)-1
    If StringInStr($aTitel[$t], StringTrimRight($aTitel[$i], 3)) and $i <> $t Then
    ;; Was mit der Datei auch passieren soll
    Endif
    Next
    Next

    [/autoit]

    Du musst aber aufpassen, das wenn du das Array des Doppelten löschst, es zu einem Error kommt, weil die For Schleife noch bis zum Ende geht, + dem gelöschten Array. Am besten vorher auch noch ein _ArraySort laufen lassen, dann bräuchtest du bei der 2ten For Schleife evtl nur bis 10, wenn du es 10 mal Doppelt hast. Dann natürlich nicht immer t von 0 - 10 sondern $i + $t (also $i + 1 um das nächste Lied zu überprüfen)

    Hoffe es konnte helfen.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Wenn die "doppelten" Titel alle mit "...(x).mp3" enden, dann sollte folgendes klappen:

    [autoit]

    #include <array.au3>
    Dim $sTitel[2] = [ "Depeche Mode - Blablabla Bla [Deluxversion] (Voice Digital 123](1).mp3", "Depeche Mode - Blablabla Bla [Deluxversion] (Voice Digital 123](2).mp3"]
    For $i=0 To UBound($sTitel)-1
    $sTitel[$i] = StringRegExpReplace($sTitel[$i],"(.+)\(\d+\)(\.mp3)","$1$2")
    Next
    _ArrayDisplay($sTitel, "Replaced Arrayitems")
    $sTitel = _ArrayUnique($sTitel)
    $sTitel[0] = "Anzahl Titel : " & $sTitel[0]
    _ArrayDisplay($sTitel,"After _ArrayUnique")

    [/autoit]

    PS: Arrayunique wird bei dieser großen Sammlung sicher einiges zutun haben => auslagerung in eine Dll/Assembler/C(++)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!