Web-valide Dateinamen aus Tags erzeugen

Hallo,

Gibt es eine fertige Umwandlungsmethode um aus Tags web-sichere Dateinamen zu erzeugen?

Also ich muss Audiodateien anhand der in den Tags gespeicherten Information in einer Art und Weise umwandeln, sodass einerseits die Info aus den Tags verwendet, andererseits diese aber in einer Art umgewandelt werden, sodass der fertige Dateiname web-konform ist.

D.h. also, dass Sonderzeichen in normale Zeichen umgewandelt werden. z.B. aus í, ó müsste I, O werden, entsprechend alle anderen Sonderzeichen wie /()%° etc. behandelt und Leerzeichen durch andere Zeichen ersetzt werden, etc.

lg,
Bernhard

Du meinst sowas wie URLEncode?

Es gibt in Mp3tag den Befehl

Der wandelt aber meines Wissens keine Sonderzeichen um, sondern sorgt nur dafür, dass man Dateinamen bekommt, die in einem (Windows-)Filesystem akzeptiert werden. Also ohne Fragezeichen, Sterne, Grösser-Als-Zeichen etc.

Was du mit "web-sicher" oder "web-valide" genau meinst, das müsstest du ausführlicher beschreiben.
Eigentlich sollte im Web jedes Zeichen aus dem UTF-8 Standard abgebildet werden können.

Vielleicht meinst du den beschränkten Zeichensatz, wenn es darum geht, eine Datei in einem Dateisystem zu speichern, und zwar so, dass sie auf jedem x-beliebigen Server gespeichert werden kann, ohne Änderung von möglicherweise illegalen Sonderzeichen im Dateinamen.
Vielleicht meint du also das prophylaktische "sanitizing" von Dateinamen.

Mp3tag hat die Skript Funktion $validate, die die gröbsten Fehler für den Dateinamen und Dateipfad ausblenden kann.

Zur automatischen Umwandlung von diakritischen Zeichen gibt es eine fertige Funktion nicht.
Aber mit den Skript-Funktionen $replace oder $regexp kann man einen "Sanitizer" in einer Aktionengruppe zusammenbauen.
Die in Mp3tag verwendete Regex Maschine ist dort erklärt ... http://www.boost.org/doc/libs/1_31_0/libs/...doc/syntax.html
http://www.boost.org/users/index.html

Als Anregung zum Selberbauen ...
http://stackoverflow.com/a/17186583

Siehe auch dort, ob das noch zu gebrauchen ist ...
Unicode to ASCII
Unicode to ASCII

DD.20131117.1936.CET

Danke für die Rückmeldungen.

validate hilft nicht, da eben es eben "nur" für Windows-Dateinamen korrigiert.

Ok, um es vielleicht möglichst einfach genauer zu beschreiben: Ich brauch filenamen, die so auch als URL funktionieren. Ok, auch hier gibt es theoretisch Sonderzeichen - funktionieren meines Wissens nach bis jetzt nicht zuverlässig. Also bräuchte ich ähnliche/gleiche Regeln für Dateinamen wie sie für TLDs (Domainnamen) gelten. Sprich keine Sonderzeichen ([]%/, ü, ä, ö, ó, í, etc.) und keine Leerzeichen, etc...)

Leider bin ich wirklich nicht gut genug um mir sowas aus regular expressions selber zu bauen...

lg,
Bernhard

Wenn du die Regeln klar beschreiben kannst, dann können wir bestimmt weiter helfen.

??? Meinst du vielleicht so etwas wie das ...

... oder so ...

DD.20131117.2044.CET

ok, der Dateiname sollte im Prinzip keine anderen Zeichen enthalten als:

A-Z, 0-9, Bindestrich, Unterstrich

FTP Übertragung ist case sensitive. Also alles in Gross- oder Kleinbuchstaben wäre sinnvoll.

Also aus:

$upper(%title% - %genre% - %year% - %artist% - %album%)

mit

Mi taza de café (Bsp) - Tango - 1944-01-01 - Orquesta Típica Victor - tango.at v1

sollte werden:
MI_TAZA_DE_CAFE_BSP-TANGO-1944-01-01-ORQUESTA_TIPICA_VICTOR-TANGO_AT_V1

lg,
Bernhard

Ausgabebeispiel:
MI_TAZA_DE_CAFÉ_BSP-TANGO-19440101-ORQUESTA_TÍPICA_VICTOR-TANGO_AT_V1
Format string:

$upper($replace(%TITLE%' - '%GENRE%' - '$replace(%YEAR%,'-',)' - '%ARTIST%' - '%ALBUM%,'(',,')',,'.','_',' ','_','_-_','-'))

Nun musst du noch die diakritischen Zeichen umwandeln, dafür benutzt du die Aktionengruppe "UniToAsc.Diacritics".

DD.20131118.0825.CET

Vielen Dank Detlev!

Leider muss ich noch kurz wegen der Aktionsgruppe nachfragen.. Ich hab noch nie eine "externe" Aktionsgruppe verwendet. Bin draufgekommen, dass im Programmverzeichnis data/actions .MTA files stehen. Ich hab Deine Vorgeschlagene dazukopiert. Sie wird aber nicht als Aktion im Aktionsmenü angezeigt?!

Was mach ich da falsch?

Vielen Dank für Deine Hilfe!

lg,
Bernhard

ggf. ist das der falsche Ort. Versuch mal
%appdata%\mp3tag\data\actions

Das Programmverzeichnis ist dafür nicht der richtige Ort.
Die MTA Dateien gehören in das Anwenderverzeichnis
bei Win XP: "%APPDATA%\Mp3tag\data\actions"
bzw.
"%APPDATA%\Roaming\Mp3tag\data\actions"

Um die ganze Sache rund laufen zu lassen, schlage ich folgende Schritte vor.

  1. Ein neues Tag-Feld FN_NEU formatieren mit der Aufbereitungsfunktion wie schon gezeigt.
  2. Ein neues Tag-Feld UNI_TO_ASC formatieren mit %FN_NEU%.
  3. Die Aktionengruppe UniToAsc.Diacritics ausführen.
    Diese Aktionen erwarten das Tag-Feld UNI_TO_ASC.
    Danach sollte im Tag-Feld UNI_TO_ASC das bereinigte Ergebnis zu sehen sein.
  4. Tag-Feld FN_NEU formatieren mit %UNI_TO_ASC%
  5. Tag-Feld UNI_TO_ASC entfernen.
  6. Dateiname formatieren mit %FN_NEU%.
  7. Tag-Feld FN_NEU entfernen.

Das kann man auch kürzer fassen, aber so hast du erst einmal die Gelegenheit, jeden Schritt einzeln zu verfolgen.

Alle Schritte lassen sich in drei Aktionengruppen verteilen.

  1. Aktionengruppe für Aufbereitung und Vorbereitung für Nr. 2
  2. Aufruf Aktionengruppe UniToAsc.Diacritics
  3. Aktionengruppe für Nachbereitung.

Wenn alles funktioniert, dann kann man die drei Aktionengruppen über "Aktionengruppen/Utils" zu einer Meta-Gruppe zusammenfassen.

DD.20131118.1209.CET