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

  • 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:


    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


    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.

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


    #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")


    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!