Wie oft ist eine MD5-ID vorhanden :-( grübel
#1
Lightbulb 
Hallo @all

Das Thema könnte noch hier other Post reinpassen, hat aber mit Autofill nicht viel zutun 

Aus Festplatte C ein Auszug von ca. 100000 Dateien nur MD5-Hash's mit Anfangszeichen "B":


[Bild: 6tiw7s.jpg]
Das Bild zeigt einige von 6053 Dateien, daraus resultieren 5568 einzelne Dateien.
Der Berechnungsvorgang hat ca. 10min mit dem Makro aus "ListeOhneDuplikate2.xlsm" oben gen. Thread gebraucht.
Die im Makro liegende Formel:  
Code:
.Range("H2:H" & .Cells(.Rows.Count, 3).End(xlUp).Row).FormulaR1C1 = "=SUMPRODUCT(EXACT(Tabelle1!C[-5],RC[-4])*1)"


Ich habe 7 Festplatten mit MP3-Dateien befüllt
2 davon sind Sicherungen
gesamtes Datenvolumen ca. 1,8 Terra ohne Cover & Tracklisten

MD5-Audio

Es gibt 16 Anfangszeichen (MD5-Hash): 0 bis 9 und A - F; Länge 32 Zeichen

Der Weg über die MD5-Hash ist zum finden der Identischen, der beste.
Edit: hier noch die MD5 aber ohne A - F (Datei war zu groß)

.xlsx   MD5ID.xlsx (Größe: 1,74 MB / Downloads: 2)

Wie kann/könnte man hier Zeit der Berechnung einsparen?

Könnt ihr mir bitte einen Denkanstoß geben.
Top
#2
Hallo!
Ich habe mir tatsächlich die 1,74 MB angetan ...
Hash aufsteigend sortieren, 
in B2 die Formel: =WENN(ODER(A2=A1;A3=A2);"mehrfach";"einfach"),
Doppelklick aufs Ausfüllkästchen,
Spalte B kopieren, Einfügen Werte

Dauer per Makro:
Code:
Sub Quickie()
Dim Start As Double
Start = Timer
With Tabelle1
   .Columns(1).Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes
   With .Range("B2:B" & .Cells(Rows.Count, 1).End(xlUp).Row)
      .Formula = "=IF(OR(A2=A1,A3=A2),""mehrfach"",""einfach"")"
      .Copy: .PasteSpecial xlPasteValues
   End With
End With
MsgBox Timer - Start
End Sub
1 Sekunde bei meinem schlappen Notebook.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • WergibtmirRat
Top
#3
Hallo Frank,

vielleicht hilft Dir die Lösung weiter:

Spalte A sortieren
in Zelle B1: "Anzahl"
in Zelle B2 die Formel: =WENN(A2=A1;B1+1;1)
Diese Formel nach unten erweitern (B2 selektieren, Doppelklick in die untere rechte Ecke der Markierung,

Dann Pivottabelle erstellen:
[
Bild bitte so als Datei hochladen: Klick mich!
]
Klick auf den Pfeil bei Anzahl und dort Wertfeldeinstellungen auswählen.
Maximum auswählen.
Fertsch.

Anbei eine Beispieltabelle...



Gruß Carsten


Angehängte Dateien
.xlsx   Kopie von MD5ID.xlsx (Größe: 750,86 KB / Downloads: 1)
[-] Folgende(r) 1 Nutzer sagt Danke an DbSam für diesen Beitrag:
  • WergibtmirRat
Top
#4
Hi Carsten!
War ja auch mein erster Gedanke (im verlinkten Thread).
Da die MP3s ja physisch auf diversen Festplatten (mehrfach) vorhanden sind, ist dies hier nicht zielführend.
(nicht ganz Ernst gemeint: es sei denn, VBA könnte seine Karteileichen löschen  :05: )

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Hallo Ralf,

ja, man sollte genauer lesen...
Ich habe meinen Beitrag aktualisiert, allein Duplikate entfernen reicht nicht aus..
Du warst aber schneller mit Deinem Hinweis...


Was ich aber immer noch nicht richtig verstehe:
Was will Frank nun genau machen?



Gruß Carsten
Top
#6
(30.07.2015, 16:48)RPP63 schrieb: ... habe mir tatsächlich die 1,74 MB angetan ...
Hash aufsteigend sortieren, 
in B2 die Formel: =WENN(ODER(A2=A1;A3=A2);"mehrfach";"einfach"),
Doppelklick aufs Ausfüllkästchen,
Spalte B kopieren, Einfügen Werte...1 Sekunde bei meinem schlappen Noteb...
Hallo Ralf, habs noch nicht probiert-machs aber noch.

Ich weiss, der Happen war groß sehr groß, trotzde Danke für's reinschauen
Alle Dateien in der Tabelle mit alle Tagfelder bringen es auf einen Wert um die 837 MB
Ja und Nein
Ja: mehrfach ist schon I.O. , aber ich benötige die Häufigkeit eines Track's
Nein: Wenn jede Datei bei identischer MD5-Hash nur "mehrfach" in der Spalte stehen hat, wie solch ich erkennen, wer was wo und wieviel hat


(30.07.2015, 17:04)DbSam schrieb: ...die Lösung ...
Spalte A sortieren
in Zelle B1: "Anzahl"
in Zelle B2 die Formel: =WENN(A2=A1;B1+1;1)
Diese Formel nach unten erweitern (B2 selektieren, Doppelklick in die untere rechte Ecke der Markierung,

Dann Pivottabelle erstellen:
Klick auf den Pfeil bei Anzahl und dort Wertfeldeinstellungen auswählen.
Maximum auswählen...
Hallo Carsten
Die Häufigkeitszählung mit Wenn  addieren, habe ich auch schon durch.

Was ich erreichen will.
Alle Dateien werden eingelesen, mittels Exportdatei im Format *csv an Excel übergeben.
Da der Pc das Datenvolumen im Ganzen nicht schlucken kann, wird zum einen nach Pfad sortiert immer ein Teil ausgelesen anschließend in die Liste per copy & paste eingefügt (Speichern)
Nächster Durchgang sortiere ich die MD5-Hash pro Festplatte, hier wird direkt die doppelt vorkommenden gezählt ("%_total_files%")
Auch hier werden alle Teile in ein Tabellenblatt kopiert.
Jetzt hab ich die kompletten Daten in Tabelle1 und die Identnummern in Tabelle2
Nachdem die doppelten gelöscht sind Tab2 kann ich mit Sverweis auf Tab1 jeder Datei in der Spalte Anz. die Addition gleicher MD5 wiedergeben.

Um dem ganzen einen Sinn zu geben, anhand der Filter Spalte MD5 (von A n. Z) & Spalte Anz. (Absteigend) kann nun eine*.m3u erstellt in MP3Tag eingelesen werden.
Dort sortiere ich das Erstellendatum - markiere die neueren (wenn zuviel) die dann gelöscht werden, bzw. sind Einzelne Dateien/Alben vorhanden die ich dann in die Sicherungspartitionen kopiere.

Das war's
Das mache ich fast monatlich

anbei ein Auszug nur ein Titel aber 16 x vorhanden
[Bild: 95vguh.jpg]
Top
#7
Hallo Frank,

Danke für Deine weiterführenden Erläuterungen.
Jetzt wird die Sachlage und Dein Anliegen so langsam etwas klarer.

So richtig ganz habe ich Dich leider noch nicht verstanden. Das kann zum einen an der Uhrzeit und meinem schläfrigem Geist oder zum anderen auch an den fehlenden Beispieldateien liegen. Oder auch beides zusammen. Blush

Kannst Du mal bitte ein, zwei reduzierte *.csv Dateien mit Beispieldaten(einzelne, doppelte, dreifache, whatever) hochladen. Ebenso das/die dazugehörige Excelsheet, die Ergebnisdatei und Deine *.m3u. Vielleicht verstehe ich dann Dein Anliegen komplett ohne 'ewiglangehinundherfragerei'.

Meiner Meinung nach vergewaltigst Du Excel ganz heftig. Das ist eigentlich eine Aufgabe für eine Datenbank, Excel ist mMn dafür überfordert.
Hast Du einen SQL-Server bei der Hand oder kennst Dich damit aus? (Falls nicht, kann man auch Access dafür nutzen.)
Ich kann dann am Sonntagabend mal versuchen etwas zu programmieren, wo sofort Deine *.m3u ausgegeben wird, ohne Excel. Wahrscheinlich gleich eine Exe in .Net, das geht am schnellsten...


Wenn jemand noch eine andere/bessere Idee hat, dann gern. :)
Für mich scheidet Excel bei dieser Datenmenge und Sachlage aus.


Gruß Carsten
Top
#8
(31.07.2015, 01:57)DbSam schrieb: ...Kannst Du mal bitte ein, zwei reduzierte  *.csv Dateien mit Beispieldaten(einzelne, doppelte, dreifache, whatever) hochladen. Ebenso das/die dazugehörige Excelsheet, die Ergebnisdatei und Deine *.m3u. Vielleicht verstehe ich dann Dein Anliegen...

Hallo Carsten,
danke für deine Sachkenntnisse - SQL-Server zwar schon von gehört, aber dachte das ist nichts für mich.
Mit Access habe ich es mal versucht, war für mich zu hoch. Access naja - müsste mich mal mehr reinknieen

Hab mal mit der sortierten Pivot (zum ersten Mal) experimentiert, nachdem ich die Einstellungen gefunden habe, sieht's garnicht mal schlecht aus.


Ich könnte mal den Wust in meine Dropbox kopieren mit Link an Dich versteht sich.

- die *.csv (alle Tagfelder ca. 150 Spalten) werden 1:1 übernommen, ergänzend kommen noch 2 Spalten in A & B (lfd.Nr & aus dem Pfad =(links;xy;1) als *.xl* gespeichert

mfg
Top
#9
Hallo Frank,

für den Anfang reicht es, wenn Du die *.csv auf ein übersichtliches  und per Hand nachprüfbares Maß reduzierst und darin soweit möglich alle in der Realität vorkommende Duplikatsmöglichkeiten per Hand erzeugst.
Aus dieser Datei erzeugst Du dann Dein Excelsheet und die Ergebnisdatei *.m3u. - Das wäre dann eine Vorlage zum Nachprogrammieren.
Danach kann und sollte man noch zum Test Deine Riesendatei 'durchwursteln'.

Fragen noch:
Hat Deine *.csv Datei eine Headerzeile? Oder kann man diese dann im Excelsheet erkennen und auslesen?
Duplikatserkennung per Hash und welches Verzeichnis hat Priorität, bzw. gibt es da eine Reihenfolge?

Und ...? Und dann noch...?
Naja, wir warten erst einmal auf Deine abgespeckten Daten... :)



Gruß Carsten


PS:
Wie letztens geschrieben, ich kann mir das frühestens am Sonntagabend mal anschauen...
Top
#10
(31.07.2015, 16:01)DbSam schrieb: ...Deine *.csv Datei eine Headerzeile? Oder kann man diese dann im Excelsheet erkennen und auslesen?
Duplikatserkennung per Hash und welches Verzeichnis hat Priorität, bzw. gibt es da eine Reihenfolge?...mal anschauen...
Hallo Carsten
zu 1. Ja alle Csvdateien haben Kopfzeile, hier bei Allen einer Partition

$filename(C:\komplette Liste Datei-Pfad mit MD5.csv,utf-16)"Pos."$char(9)"Datei-Pfad"$char(9)"Pfad"$char(9)"MD5"$char(9)"numerische Zeit"$char(9)"Erstellt am"
$loop(%_path%;%_folderpath%)"%_counter%"$char(9)"%_folderpath%"$char(9)"%_path%"$char(9)"%MD5-Hash Audio_D%"$char(9)"%_file_create_datetime_raw%"$char(9)"%_file_create_datetime%"
$loopend()

zu 2. Hier bei nur Einzel-MD5


$filename(L:\xxx\xxxMD5_000001.csv,utf-16)"MD5-Nr"$char(9)"MD5"$char(9)"MD5_total"
$loop($regexp(%MD5-Hash Audio_D%,'(\l)',$1k),1)"%_counter%"$char(9)"%MD5-Hash Audio_D%"$char(9)"%_total_files%"
$loopend()


Da fängt die Arbeit nun an per Sverweis die Häufigkeit der Datei zuordnen
Aber mit deiner Hilfe bin ich schon dabei.
- 1. Formel anwenden
- 2. Pivot auswerten, soll heißenden Dateien die Werte (Häuf.) zuordnen
Beispieldatei folgt, bin schon fast weg - letzter Dienst

man liest sich am Sonnabend
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste