Datenträger nach MP3s durchsuchen - Inhalt inkl. MusikTitel, Dauer, Interpret, Album, Jahr, kbits, Genre in eine .mdb schreiben
10.04.2010
22:57:52 Uhr3288 Aufrufe
1 Antwort
22:57:52 Uhr
1 Antwort
Hilfreich +1
In Anlehnung an die Anleitung der letzten Woche nun eine Abwandlung für .mdb (damit man später per asp(x) eine Website mit Suchfunktion basteln kann....
Das Vorwort nennt schon alle relevanten Ideen...
Erklärungen zur Veränderungen finden sich in dieser Anleitung...
Dieser Code stellt auch nicht der letzten Weisheit Schluss dar, sondern soll hauptsächlich dazu dienen, Teile oder den gesamten Code als Grundlage für eigene Projekte zu verwenden...
Daher hier einfach nur der Code, der - unverändert - nur für XP funktioniert...:
Welches Ergebnis erhält man durch diesen Code?
Es wird ein Gesamtes Laufwerk bzw. bestimmter Ordner inkl. aller Unterordner auf Dateien durchsucht, die mit Eurem Musikplayer (in meinem Fall Winamp) standardmäßig geöffnet werden.
(m3u - Dateien werden von der Suche ausgespart).
Dann wird eine Datenbank erstellt, die 2 Tabellen enthält.
In der 1. Tabelle befinden sich die Ordnernamen (da ich meine Alben jeweils in eigene Unterordner gespeichert habe)
In der 2. Tabelle befinden sich alle Musiktitel inkl. Dauer, Interpret, Album, Jahr, kbits, Genre.
Zur späteren Verknüpfung der beiden Tabellen haben die jeweiligen Titel den selben Indexwert, wie ihn der Ordner hat.
Wenn im m3-Tag das Album bzw. der Interpret fehlt, wird der Ordner ausgelesen und entsprechendes in die Tabelle eingetragen
(bei mir nennen sich alle Ordner nach folgendem Muster:
LW:\Musik\A\#Allman Brothers\cd_Allman Brothers - Idlewild South
Was ist anzupassen?
Bei Verwendung von XP: NICHTS!
Bei Verwendung von Vista / 7 folgenden Teil
nach dieser Liste...
Ordner_in_mdb.hta
Anmerkungen oder Fragen sind wie immer herzlich willkommen...
lg
Edi
Erklärungen zur Veränderungen finden sich in dieser Anleitung...
Dieser Code stellt auch nicht der letzten Weisheit Schluss dar, sondern soll hauptsächlich dazu dienen, Teile oder den gesamten Code als Grundlage für eigene Projekte zu verwenden...
Daher hier einfach nur der Code, der - unverändert - nur für XP funktioniert...:
Welches Ergebnis erhält man durch diesen Code?
Es wird ein Gesamtes Laufwerk bzw. bestimmter Ordner inkl. aller Unterordner auf Dateien durchsucht, die mit Eurem Musikplayer (in meinem Fall Winamp) standardmäßig geöffnet werden.
(m3u - Dateien werden von der Suche ausgespart).
Dann wird eine Datenbank erstellt, die 2 Tabellen enthält.
In der 1. Tabelle befinden sich die Ordnernamen (da ich meine Alben jeweils in eigene Unterordner gespeichert habe)
In der 2. Tabelle befinden sich alle Musiktitel inkl. Dauer, Interpret, Album, Jahr, kbits, Genre.
Zur späteren Verknüpfung der beiden Tabellen haben die jeweiligen Titel den selben Indexwert, wie ihn der Ordner hat.
Wenn im m3-Tag das Album bzw. der Interpret fehlt, wird der Ordner ausgelesen und entsprechendes in die Tabelle eingetragen
(bei mir nennen sich alle Ordner nach folgendem Muster:
LW:\Musik\A\#Allman Brothers\cd_Allman Brothers - Idlewild South
Was ist anzupassen?
Bei Verwendung von XP: NICHTS!
Bei Verwendung von Vista / 7 folgenden Teil
id = indexwert
Titel = objFolder.GetDetailsOf(strFileName, 0)
Dauer = objFolder.GetDetailsOf(strFileName, 21)
Interpret = objFolder.GetDetailsOf(strFileName, 16)
Album = objFolder.GetDetailsOf(strFileName, 17)
Jahr = objFolder.GetDetailsOf(strFileName, 18)
bit = objFolder.GetDetailsOf(strFileName, 22)
Genre = objFolder.GetDetailsOf(strFileName, 20)
Titel = objFolder.GetDetailsOf(strFileName, 0)
Dauer = objFolder.GetDetailsOf(strFileName, 21)
Interpret = objFolder.GetDetailsOf(strFileName, 16)
Album = objFolder.GetDetailsOf(strFileName, 17)
Jahr = objFolder.GetDetailsOf(strFileName, 18)
bit = objFolder.GetDetailsOf(strFileName, 22)
Genre = objFolder.GetDetailsOf(strFileName, 20)
nach dieser Liste...
Ordner_in_mdb.hta
01.
<head> 02.
<meta name="author" content="Edi Pfisterer aka urobe73_administrator.de"> 03.
<meta name="generator" content="Ulli Meybohms HTML EDITOR"> 04.
<title>Edis Dateiliste 2 Access</title> 05.
<HTA:APPLICATION 06.
SCROLL="yes" 07.
SINGLEINSTANCE="yes" 08.
WINDOWSTATE="normal" 09.
> 10.
</head> 11.
<script language="VBScript"> 12.
'Const myDB = "a2000.mdb" 13.
14.
Sub CreateNewMDB(FileName, Format) 15.
Dim Engine 16.
Set Engine = CreateObject("DAO.DBEngine.36") 17.
Engine.CreateDatabase FileName, ";LANGID=0x0409;CP=1252;COUNTRY=0", Format 18.
End Sub 19.
20.
function dbanlegen(mydb) 21.
CreateNewMDB mydb, 64 22.
end function 23.
24.
function TabelleAnlegen(mydb) 25.
26.
on Error resume next 27.
Set Conn = CreateObject("ADODB.Connection") 28.
29.
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & myDb 30.
31.
' conn.Execute "DROP TABLE Alben" 32.
33.
Conn.Execute ("CREATE TABLE Alben(" & _ 34.
"Id INTEGER NOT NULL," & _ 35.
"Name VARCHAR(255) NOT NULL)") 36.
37.
Conn.Execute ("CREATE TABLE tbMusiktitel(" & _ 38.
"MusiktitelId INTEGER ," & _ 39.
"Musiktitel VARCHAR(255) NOT NULL," & _ 40.
"Dauer VARCHAR(255) ," & _ 41.
"Interpret VARCHAR(255) ," & _ 42.
"Album VARCHAR(255) ," & _ 43.
"Jahr VARCHAR(255) ," & _ 44.
"kbits VARCHAR(255) ," & _ 45.
"Genre VARCHAR(255) )") 46.
47.
conn.Close 48.
49.
end function 50.
51.
function dbEintrag1(id,Titel,Dauer,Interpret,Album,Jahr,bit,Genre,Ordnername,mydb) 52.
53.
on Error resume next 54.
Titel = replace(Titel,"'"," ") 55.
Interpret = replace(Interpret,"'"," ") 56.
Album = replace(Album,"'"," ") 57.
Genre = replace(Genre,"'"," ") 58.
59.
Set Conn = CreateObject("ADODB.Connection") 60.
61.
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & myDb 62.
sql ="INSERT INTO [tbMusiktitel] (MusikTitelid, MusikTitel, Dauer, Interpret, Album, Jahr, kbits, Genre) VALUES (" & id & ",'" & Titel & "','" & Dauer & "','" & Interpret & "','" & Album & "','" & Jahr & "','" & bit & "','" & Genre & "')" 63.
64.
conn.Execute (sql) 65.
' MsgBox sql 66.
67.
conn.Close 68.
69.
end function 70.
71.
function dbEintrag(id,Album,mydb) 72.
73.
on Error resume next 74.
Album = replace(Album,"'"," ") 75.
Set Conn = CreateObject("ADODB.Connection") 76.
77.
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & myDb 78.
sql ="INSERT INTO [Alben] (id, Name) VALUES (" & id & ",'" & Album & "')" 79.
80.
conn.Execute (sql) 81.
' MsgBox sql 82.
83.
conn.Close 84.
85.
end function 86.
87.
88.
89.
90.
91.
Set objFSO = CreateObject("Scripting.FileSystemObject") 92.
kopfzeile = 0 93.
indexwert = 0 94.
function meineVids(pfad,dateiname) 95.
mydb = replace(dateiname,"csv","mdb") 96.
if kopfzeile = 0 then 97.
call dbAnlegen(mydb) 98.
call TabelleAnlegen(mydb) 99.
set logbuch1 =objFSO.opentextfile(dateiname, 2, true,0) 100.
logbuch1.write "Index;Ordnername;Musiktitel;Interpret;Album;Jahr;Dauer;bit;Genre" 101.
logbuch1.close 102.
kopfzeile = 1 103.
end if 104.
105.
If radiobutton(0).Checked Then 106.
showall = "ja" 107.
End If 108.
If radiobutton(1).Checked Then 109.
showall = "nein" 110.
End If 111.
112.
Set objFolder = objFSO.GetFolder(pfad) 113.
Set colSubfolders = objFolder.Subfolders 114.
115.
For Each objSubfolder in colSubfolders 116.
on Error resume next 117.
ordnerzeichen = ordner_zeichen.value 118.
vollername = objFSO.GetAbsolutePathName(objSubfolder) 119.
indexwert = indexwert+1 120.
if showAll = "ja" then 121.
122.
ausgabe2 = indexwert & ";" & left(vollername,ordnerzeichen) & punktaln(vollername,ordnerzeichen) & vbcrlf 123.
124.
end if 125.
ausgabe1 = ausgabe2 & detail(vollername, showall, indexwert,mydb) 126.
127.
set logbuch1 =objFSO.opentextfile(dateiname, 8, true,0) ' 8 zum anfügen 128.
logbuch1.write ausgabe1 129.
logbuch1.close 130.
dateinameneu = dateiname 131.
132.
call dbEintrag(indexwert, vollername,mydb) 133.
call meineVids(vollername,dateinameneu) 134.
Next 135.
136.
end function 137.
138.
function punktaln(ordnername, anzeigezeichen) 139.
anzeigezeichen = anzeigezeichen+1 'damit er checkt, dass anzeigezeichen eine zahl ist... 140.
if len(ordnername) >= anzeigezeichen then 141.
anzeige = "... " 142.
end if 143.
punktaln = anzeige 144.
end function 145.
146.
function Detail(ordnername, lang, indexwert, mydb) 147.
dateitypen = split(Dateityp.value,";") 148.
149.
showAll = lang 150.
If urlbutton(0).Checked Then 151.
link = "ein" 152.
End If 153.
If urlbutton(1).Checked Then 154.
link = "aus" 155.
End If 156.
durchlauf = 1 157.
158.
Dim arrHeaders(34) 159.
Set objShell = CreateObject("Shell.Application") 160.
Set objFolder = objShell.Namespace(ordnername) 161.
For i = 0 to 33 162.
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i) 163.
Next 164.
For Each strFileName in objFolder.Items 165.
ordnerzeichen = ordner_zeichen.value 166.
dateizeichen = datei_zeichen.value 167.
168.
for i = 0 to UBound(dateitypen) 169.
if (instr(1, objFolder.GetDetailsOf(strFileName, 2), dateitypen(i), 1) >= 1) OR _ 170.
(instr(1, strFileName, dateitypen(i), 1) >= 1) then 171.
nemmas = 1 172.
end if 173.
next 174.
175.
if nemmas = 1 then 176.
if durchlauf = 1 AND showAll <> "ja" then 177.
178.
feedback = feedback & vbcrlf & indexwert & ";" & left(ordnername,ordnerzeichen) & punktaln(ordnername,ordnerzeichen) & vbcrlf 179.
feedback_DVD = feedback 180.
181.
durchlauf = 2 182.
end if 183.
184.
id = indexwert 185.
Titel = objFolder.GetDetailsOf(strFileName, 0) 186.
Dauer = objFolder.GetDetailsOf(strFileName, 21) 187.
Interpret = objFolder.GetDetailsOf(strFileName, 16) 188.
Album = objFolder.GetDetailsOf(strFileName, 17) 189.
Jahr = objFolder.GetDetailsOf(strFileName, 18) 190.
bit = objFolder.GetDetailsOf(strFileName, 22) 191.
Genre = objFolder.GetDetailsOf(strFileName, 20) 192.
193.
if len(Album) <= 2 then 194.
beginnAlbum = instr(Ordnername,"-")+1 195.
Album = LTRIM(mid(Ordnername,beginnAlbum,200)) 196.
end if 197.
198.
if len(Interpret) <= 2 then 199.
BeginnInterpret = instrRev(Ordnername,"\")+1 200.
EndeInterpret = instr(Ordnername,"-")-1 201.
Interpret = TRIM(mid(Ordnername,beginnInterpret,EndeInterpret - BeginnInterpret)) 202.
Interpret = Replace(Interpret,"cd_","") 203.
end if 204.
205.
206.
feedback2 = id & ";" & " ;" & left(Titel ,dateizeichen) _ 207.
& punktaln(Titel ,dateizeichen) & "; " _ 208.
& Dauer& "; " _ 209.
& Interpret & ";" & Album & ";" _ 210.
& Jahr & ";" & bit & ";" _ 211.
& Genre & ";" 212.
213.
if link = "ein" then 214.
feedback3 = Chr(34) & "=hyperlink(" & Chr(34) & Chr(34)& ordnername & "\" & Titel _ 215.
& Chr(34) & Chr(34) & ";" & Chr(34) & Chr(34) & "klick " & Chr(34) & Chr(34)& ")" & Chr(34) 216.
end if 217.
218.
if instr(1, objFolder.GetDetailsOf(strFileName, 0),"m3u", 1) =0 then 219.
feedback = feedback & feedback2 & feedback3 & vbcrlf 220.
221.
222.
223.
call dbeintrag1(id,Titel,Dauer,Interpret,Album,Jahr,bit,Genre,Ordnername, mydb) 224.
225.
end if 226.
227.
if instr(1, objFolder.GetDetailsOf(strFileName, 0),"vob", 1)>=1 then feedback = feedback_DVD & "ist eine DVD" & vbcrlf 228.
229.
end if 230.
nemmas = 0 231.
Next 232.
233.
Detail = feedback 234.
end function 235.
236.
Sub Aufgabe1 237.
238.
woissndes = pfad.value 239.
dateiname = replace(woissndes,"\","_") 240.
dateiname = replace(dateiname,":","_") 241.
dateiname = dateiname & "_" & dateityp.value & ".csv" 242.
243.
call meineVids(woissndes,dateiname) 244.
245.
DataArea.InnerHTML = "<a href='" & dateiname & "'>CSV</a> und " & "<a href='" & replace(dateiname,"csv","mdb") & "'>MDB</a> erfolgreich angelegt" 246.
247.
248.
End Sub 249.
250.
</script> 251.
252.
253.
<body bgcolor=#FAF8AF> 254.
<font face=verdana> 255.
Pfad: <input type="Text" name="pfad" value="C:\" size="" maxlength=""><br><br> 256.
257.
258.
Was erscheint als Typ, wenn man den Mauszeiger über eine gesuchte Datei bewegt: <input type="Text" name="Dateityp" value="audio" size="25" maxlength="20"> <br> 259.
<font size = 1> 260.
(es können auch mehrere Typen, durch <b>;</b> getrennt, angegeben werden!)<br> 261.
Beispiele: Irfan;Windows Media;excel;word;winamp ...</font><br><br> 262.
263.
264.
Die Anzeige der Ordner wird auf <input type="Text" name="ordner_zeichen" value="200" size="" maxlength=""> eingeschränkt!<br><br> 265.
266.
Die Anzeige der Dateinamen wird auf <input type="Text" name="datei_zeichen" value="200" size="" maxlength=""> eingeschränkt!<br><br> 267.
268.
Sollen auch Ordner angezeigt werden, die den gewünschten Dateityp NICHT enthalten? 269.
Ja <input type="radio" name="radiobutton" value="0"> Nein <input type="radio" name="radiobutton" value="1" checked><br><br> 270.
Sollen in der .csv-Datei Links zu den Dateien erscheinen? 271.
Ja <input type="radio" name="urlbutton" value="0"> Nein <input type="radio" name="urlbutton" value="1" checked><br><br> 272.
<br> 273.
274.
275.
<input type="button" value="Datei anlegen" name="run_button" onClick="Aufgabe1"><br> 276.
<font size = 1>(Die Verarbeitung kann mehrere Minuten dauern... Bitte um etwas Geduld)</font> 277.
278.
<br><br><br> 279.
<b> 280.
<div id="dataarea"></div> 281.
</b> 282.
</font> 283.
</body>Anmerkungen oder Fragen sind wie immer herzlich willkommen...
lg
Edi
diekoenigs schreibt am 20.04.2010 um 08:35:03 Uhr
Sehr geile Idee und sieht gut aus.
Habs zwar noch nicht versucht, werds bei Gelegenheit tun.
OT: Am coolsten find ich den Teil des Codes:
woissndes = pfad.value
:D
Eindeutig eindeutig..
Habs zwar noch nicht versucht, werds bei Gelegenheit tun.
OT: Am coolsten find ich den Teil des Codes:
woissndes = pfad.value
:D
Eindeutig eindeutig..














