Filtern mit einer externen Textdatei

Hallo,
ich habe eine 200 zeilige Textdatei Interpret - Songtitel mit der ich alle gleichnamigen Einträge im Mp3Tag anzeigen lassen möchte.

Ist das möglich, wenn ja, wie gehe ich da vor?

MP3tag soll jeweils 1 Zeile aus der Textdatei lesen und dann nach dem gefundenen Begriff filtern?
Fällt mir nichts ein, wie das gehen können soll.

Ich hab's geahnt, aber da ich nur einen minimalen Bruchteil der MP3Tag-Funktionen kenne, hab ich sicherheitshalber nachgefragt.
Danke

Naja, es bliebe natürlich der Kopieren&Einfügen-Weg aus der geöffneten Textdatei.
Ich wüsste jetzt auch nicht, was denn nach dem Filtern des ersten Begriffs passieren soll - müsste, wenn die Liste der angezeigten Dateien gefiltert wurde, dann nicht erst mal ausgewählt und irgendwas damit gemacht werden, bevor dann der nächste Filter-Begriff genommen wird?
Und was soll passieren, wenn die Filterung zu keiner angezeigten Datei führt.
All dies sind ggf. Gründe, warum es diese Funktion nicht gibt.

Mein Hintergrund:
ich habe, wie schon des öfteren erwähnt, eine Access-DB aufgebaut, in der ich alle MP3Tag-Songs eingelesen hab, diese Richtung MP3Tag->Textexport->AccessDBimport klappt mittlerweile hervorragend mit nur wenigen Klicks.
Wenn ich nun in Access nach Sänger oder Sängerin filtere und das Ergebnis in eine Textdatei schreibe um dann mit dem Ergebnis im MP3Tag weiterzuarbeiten, stoße ich an Grenzen.
Was ich aus jetziger Sicht zu Beginn meiner Arbeit mit Mp3Tag versäumt habe:
Benutzerfelder für "Mann" "Frau" "Band" "Frauenband" "Duo" "Instrumental" etc. anzulegen. Mit diesen Einträgen ginge es jetzt deutlich einfacher.
Dann wäre es ein Klacks nach diesen Feldern zu Filtern.
Wie sagt man so richtig: Hinterher ist man immer schlauer.

Ginge dieser weg?
Mp3Tag lässt ja zu, dass ich Felder in eine Datei exportiere, den Export bearbeite und zurück lese ...

Ich lege Die genannten Felder ein, exportiere neu, mit den nun noch leeren Feldern, fülle sie mit Access, und lese sie zurück.
ich werd alles sichern und dann versuchen.

wenn du in Access auch die Dateinamen gespeichert hast, kannst du die als Identifikator für den Datensatz nehmen.
Du könntest dann einen Access-Export bauen, der als Felder am besten %_PATH% und dann die

enthält.
Und das importierst du dann mit einer geeigneten Maske mit Konverter>Text-Datei - Tag.
Der Import erlaubt auch das Anlegen neuer Felder.

Du könntest diese Textdatei als Playlist *.m3u speichern, mit der entsprechenden Schreibweise natürlich:

Diese Playlist kannst Du dann in Mp3tag laden, was dann wiederum zur Auflistung nur dieser Dateien führt.
Hinweis:
Das ist kein wirklicher Filter, sondern es werden nur die Dateien geladen, die in der Playlist stehen.

Ohrenkino und du verfolgen zwei unterschiedliche Strategien.
Für meine Zwecke ist deine Herangehensweise flexibler, da ich keine zusätzlichen Felder benötige und sie mir Platz für viele Spielereien lässt.

Es zeigt sich wieder, dass eine sehr sorgfältige Analyse des Datenbankdesigns nötig ist.
Das bedeutet ich muss zu Beginn wissen, was am Ende herauskommt. (das ist schier unmöglich)
Vielen Dank Euch beiden!!!

1 Like

Hast du denn den Dateinamen mit erfasst?

Und eine Randnotiz als meine Meinung (aber da darf natürlich jeder machen, was er/sie will):
Es zeigt sich für mich, dass es von Vorteil ist, die Daten da zu speichern, wo sie vorkommen, bei Tag-haltigen Dateien eben in den Tags und nicht an einem externen Ort.
Ich bin mir ziemlich sicher, dass alle Daten auch in (benutzerdefinierten) Feldern untergebracht werden können und dann ohne Anwendungswechsel zur Informationsgewinnung genutzt werden können.

Stimmt, nur dazu muss ich direkt von Anfang an wissen was ich will.
Jetzt nach fast einem 3/4 Jahr weiß ich es immer noch nicht, und ich denke meine Wünsche an die DB werden immer mehr werden, je länger ich damit arbeite.

Als Beispiel kannst du das MP3Tag-Programm nehmen, es werden nach nach der Erstellung 1999 immer noch Änderungswünsche an das Programm gestellt.
Ich bin der festen Überzeugung, dass, wenn Florian mit seinem heutigen wissen das Prg. neu aufsetzen würde, er es andsers gestalten würde.

zum Thema zurück:
Aktuell hab ich mittels einer VBA-Routine aus der Textdatei eine M3U Datei erstellt (folgt später). Diese hab ich in MP3Tag eingelesen und siehe da, alle Dateien werden im MP3Tag aufgelistet.

Ja. Und jetzt?
Jetzt musst du doch alle Daten, die du eigentlich schon in Access hast, per Hand und mit MP3tag eintragen..
Wenn deine Datenbank es hergibt, zusammen mit dem (möglichst vollständigen) Dateinamen in einer Textzeile und immer an der selben Stelle die noch fehlenden Daten aufzulisten, dann kannst du mit 2 Schritten alle fehlenden Daten in den Dateien speichern. Es ist dann kein Filtern o.ä. mehr nötig.
Schritt 1: Export der Daten aus Access in eine Textdatei mit eindeutigen Feldtrennern und einem Datensatz pro Zeile.
Schritt 2: mit Konverter>Text-Datei - Tag import der Daten aus der Textdatei. Wo welche Daten hingehören wird gesteuert über den Dateinamen, der Teil des Datensatzes ist.
Fertig.

hier für interessierte die versprochene VBA-Routine:

Public Sub cmdPlayWinamp_m3u()
    Dim Pfad As String
    Dim aktZahl As Long
    Dim I As Long
   
    'Variable deklarieren
    If blnDeklariert = False Then
        Call deklaration
    End If
   
    'alte m3u-Datei löschen
    On Error Resume Next
    Kill "D:\zumLoeschen\txt-mp3tag.m3u"
    DoEvents
    On Error GoTo 0
    On Error GoTo cmdPlayWinamp_m3u
   
    'Tabelle/Abfrage die die gewünschten Daten enthält deklarieren
    Set rs4 = DB.OpenRecordset("tblMp3_Zusammenstellung", dbOpenDynaset)
    Close #1
    'den 'Steam' zum Export öffnen
    Open "D:\zumLoeschen\txt-mp3tag.m3u" For Output As #1
    
    'M3U - Kopfzeile
    Print #1, "#EXTM3U"
    
    'Die Tabelle öffnen
    With rs4
        'anzahl der Datensätze ermitteln
        .MoveLast
        aktZahl = .RecordCount
        .MoveFirst
    
        'ab hier die Daten Zeile für Zeile exportieren
        For I = 1 To aktZahl
            Pfad = ""
            Pfad = "#EXTINF:"
            Pfad = Pfad & Trim(.Fields("Dauer_Sek")) & ","
            Pfad = Pfad & Trim(.Fields("Interpred_titel")) & vbCrLf
            Pfad = Pfad & Trim(.Fields("pfad"))
            Pfad = Pfad & Trim(.Fields("dateiname"))
            Print #1, Pfad
            .MoveNext
        Next I
    End With
    
    'alles schließen
    Close #1
    Set rs4 = Nothing
    
cmdPlayWinamp2a:
    'Fertigmeldung
    MsgBox "ok"
    Exit Sub
cmdPlayWinamp_m3u:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
    Resume Next
End Sub

Auch wenn das jetzt nichts mehr mit dem Thema zu tun hat:

  1. In Deinem Code fehlt der Abschnitt für deklaration.
  2. Die boolesche Variable blnDeklariert wird selber nirgends deklariert.
  3. Die DB-Definition für DB.OpenRecordset steht nirgends

Dieser VBA-Code funktioniert ausschliesslich, wenn man exakt die gleichen Pfad- und Dateiangaben benutzt. Oder wenn man den Code zuerst manuell beim KILL und OPEN anpasst.
Das Muster ist sicher gut gemeint @Fotoknipser, es hilft aber andern Mp3tag-Benutzern wohl nur in sehr minimalem Umfang. Ich würde deshalb unbedingt die zwingenden Voraussetzungen (MS Access, Pfade, Tabellennamen etc) erwähnen.

Stimmt, ich hatte es tatsächlich nur gut gemeint.

zu 2 + 3: Die DB-Definition für Die DB-Definition für DB.OpenRecordset steht nirgends:

Im Header des Moduls:

Option Compare Database
Option Explicit
Public rs4 As DAO.Recordset
Public blnDeklariert As Boolean

zu 1: die Deklarationsroutine:

Public Sub deklaration()
   On Error GoTo deklaration_Error

   Set DB = CurrentDb
   blnDeklariert = True

   On Error GoTo 0
   Exit Sub
deklaration_Error:
   MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
   Resume Next
End Sub

Danke für den Hinweis.
Zukünftig werde ich solche Code-Schnipsel nur noch eintragen, wenn der antwortende User danach fragt.

1 Like