Spalten automatisch erzeugen

Ich habe mich nun heute auch mit dieser Frage beschäftigt und bin dabei über diverse Beiträge in diesem Forum gestolpert. Die im letzten Posting gestellte Frage wird ja in diesem Thread bereits beantwortet. Hier noch einmal die Zusammenfassung:

Man kann in mp3tag nicht einfach den Inhalt aller erweiterten Tags von allen mp3s anzeigen lassen (es gibt bislang v2.47 keinen Button und keine Menüoption dafür), was im Übrigen auch die Bildschirmbreite unkomfortabel in die Seite zieht. Um sich alle erweiterten Tags anzusehen, gibt es folgende 3 Möglichkeiten:

  1. In der Listenansicht kann man mit Rechtsklick->erweiterte Tags in den Metainformationen alle erweiterten Tags sehen und dann auch durch die Lieder blättern <<>>
  2. DetlevD beschreibt in seinem Post oben, wie man in 3 Schritten die Listenansicht anpassen kann (alle Namen der erweiterten Tags der Dateien auslesen, daraus eine neue Konfigurationsdatei für die Listenansicht erstellen und die aktuelle Konfigurationsdatei ersetzen)
  3. Um einen reinen schnellen Überblick über möglichst viele zusätzliche Informationen der Dateien zu bekommen, empfiehlt sich der Umweg über einen Export der Dateinformationen, der nun hier im Folgenden beschrieben wird!

Die Export-Funktion findet man über Klick mit der rechten Maustaste oder im Menü unter Datei--> Export. Dort den obersten Button "Neu" (mit dem Stern) klicken, in der neuen Datei dann den Beispieltext ersetzen durch beispielsweise diesen hier bereits geposteten Code. Führt man schließlich den Export mit diesem Export-Skript durch, erhält man eine reine Textdatei mit allerlei erweiterten Tags:

$filename(Mp3tag-tagdump.txt,ANSI)
$loop(%_filename%)
---
%_filename%
---
$list(, = , $char(13)$char(10))
$loopend()

Nachdem dies aber wenig hübsch und nicht übersichtlich ist, habe ich mir die Mühe gemacht, und diese Funktion in eine hübschere html-Exportversion einzubauen. Alternativ also folgenden Code in die neue Datei einfügen:

$filename(html,utf-8)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
    <meta name="GENERATOR" content="Mp3tag - http://www.mp3tag.de&quot;

/>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Mp3tag - Datei&uuml;bersicht</title>
    <style type="text/css"><!--
        h1 { font-family: Arial, sans-serif; font-size: 10pt; color: #960000 }
        body { font-family: Verdana, Tahoma, Arial, sans-serif; font-size: 8pt; background: #f90 }
        table, tr, td { font-family: Verdana, Tahoma, Arial, sans-serif; font-size: 8pt; color: #000; }
        a:link, a:visited, a:active { text-decoration: none; color: #03f; }
        a:hover { text-decoration: none; color: #f03; }
        .title { font-weight: bold; padding: 7px; margin: 0px; color: #960000; }
        .odd { background-color: #fc0; }
        .tags { background-color: #960000; color: #f90; }
    --></style>
</head>
<body>
    <h1>Mp3tag - Datei&uuml;bersicht</h1>
    <p>%_date%</p>
    <table>
        <tr>
            <th class="title">Dateiname</th>
            <th class="title">Interpret</th>
            <th class="title">Titel</th>
            <th class="title">Album</th>
            <th class="title">Track</th>
            <th class="title">Jahr</th>
            <th class="title">Genre</th>
            <th class="title">Erweiterte Tags</th>
        </tr>

$loop(%_filename_ext%)
        <tr>
            <td$if($odd(%_counter%), class="odd",)>%_filename_ext%</td>
            <td$if($odd(%_counter%), class="odd",)>%artist%</td>
            <td$if($odd(%_counter%), class="odd",)>%title%</td>
            <td$if($odd(%_counter%), class="odd",)>%album%</td>
            <td$if($odd(%_counter%), class="odd",)>%track%</td>
            <td$if($odd(%_counter%), class="odd",)>%year%</td>
            <td$if($odd(%_counter%), class="odd",)>%genre%</td>
            <td class="odd".)>
$regexp($list(<span class="tags">,</span> ,</br>$char(13)$char(10)),('<span class="tags">ALBUM</span>(.+?)\r\n'|'<span class="tags">ARTIST</span>(.+?)\r\n'|'<span class="tags">YEAR</span>(.+?)\r\n'|'<span class="tags">TRACK</span>(.+?)\r\n'|'<span class="tags">TITLE</span>(.+?)\r\n'|'<span class="tags">GENRE</span>(.+?)\r\n'),)
</td>
        </tr>
$loopend()

    </table>
    <p>erstellt am %_date% mit %_app% - dem universellen Tag Editor <a href="http://www.mp3tag.de/" title="Mp3tag Website">www.mp3tag.de</a> und dem erweiterten Export-Skript von Matthias K&ouml;hler</p>
</body>
</html>

Viel Spaß! :sunglasses:

Du hast leider den fertig exportierten Html Code hier reinkopiert und nicht das Export-Skript.
(Die Codezeilen besser in CODE Tags einfügen statt QUOTE)

Diese Meinung von 'tiggerle' ist selbstverständlich nicht realistisch.

Meine Beiträge in dieser Richtung und Dano's Werkzeuge darauf aufbauend machen es ja gerade möglich, dass man in Mp3tag - wo sonst - alle Tag-Felder in der Listenansicht darstellen kann, die dann selbstverständlich entsprechend breit wird, wenn man alle Felder gleichzeitig einschaltet.
Und das Gute und der enorme Vorteil daran ist, dass man Filter und Aktionen und alles was man zur Bearbeitung braucht, zum Verschieben und Kopieren und so weiter, alles sofort anwenden kann.

DD.20110308.0110.CET

@Dano: Danke für den Hinweis!! Wollte ursprünglich einfach das mte-File hochladen, aber dazu fehlten mir die Berechtigungen ... Habe nun den Code im obrigen Post korrigiert.

@DetlevD: An dieser Stelle nochmals Dank an dich und Dano für die Beiträge zu diesem Thema! Dein Einwand ist natürlich völlig berechtigt. Ich wollte zuerst zum Ausdruck bringen, dass es keinen Button/Menüoption gibt, um einfach alle erweiterten Tags auf einmal einzublenden - Wortwahl und Inhalt waren im Zusammenhang mit dem Post von Bubbleman davor zu sehen. Es ist natürlich falsch, dass dies generell nicht möglich ist - du beschreibst ja oben, wie man in drei Schritten alle erweiterten Tags einblenden kann (AutoColumns erstellen und ändern). Ich schiebe es mal auf die fortgeschrittene Stunde, dass ich so einen Blödsinn geschrieben hatte und habe daher auch meinen Beitrag entsprechend abgeändert, um die Zusammenfassung als solche sinnvoller stehen zu lassen. Nichts desto trotz bietet mein Html-Export Skript am Ende eine recht schnelle Übersicht - was natürlich nicht die Funktionalität bringt (wie von dir zurecht angemerkt), jedoch muss ich sagen, dass bei mir bisher eigentlich immer in den erweiterten Tags nur "Schrott" war und ich diese einfach alle gelöscht hatte - und vorher eben rasch kontrollieren wollte, ob nichts Sinnvolles verloren gehen würde.

Was "einfach" für einen Enduser ohne Programmierkenntnisse ist, der gerne einfach nur auf einen Button drücken möchte und welche Lösungen wir hier als "einfach" präsentieren oder für uns sich als solche darstellen, dürfte wohl zweierlei sein.

Schön wäre es jedenfalls, wenn in einer zukünftigen mp3tag-Version die Listenansicht bereits durch eine entsprechende Menüoption angepasst werden könnte und auch mein Export-Skript sich dort in der Standardauswahl wieder findet - für beides besteht Bedarf und würde sicher seinen Anklang finden <_<

Das derzeit wohl ultimative Werkzeug zur Anzeige aller Spalten und Inhalte und Ausgabe in Listen (CSV, TSV, HTML, Mp3tag Export/Import) ist dort zu finden:

Export or backup all tag fields

Vielen Dank an Dano für diese wertvolle Weiterentwicklung mit außerordentlichem praktischen Nutzen!

DD.20110309.1415.CET

Hmm, tiggerle, ich meine in dem Skript noch ein paar kleine Fehler gesehen zu haben, aber schaue besser selber noch einmal nach.

Kurzerhand habe ich mir ein Mp3tag Exportskript geschrieben, was vielleicht auch für andere Mp3tag Benutzer funktioniert.

Export_HTML_Liste_Alles.zip (38.1 KB)
Das Export Ergebnis sieht etwa so aus.
Einfach.



Erweitert.

DD.20110310.0808.CET



Export_HTML_Liste_Alles.zip (38.1 KB)

Es wäre sehr freundlich, diese mir nicht ersichtlichen Fehler auch beim Namen zu nennen statt einfach die Ideen in meinem Skript dann als die eigenen zu präsentieren. Dein Skript macht mit einer kleinen Ergäzung genau das gleiche wie meines, du hast sogar meine Spaltenanordnung beibehalten.

Die im vorstehenden Posting #13 von mir veröffentlichte Exportdatei "Export HTML Liste Alles" gibt es nun in der verbesserten Version 2, die mehr "HTML sicher" ist als die Version 1.

Die in Tag-Feldern enthaltenen Sonderzeichen ...

  • Ampersand &
  • Double Quote "
  • Less Than <
  • Greater Than >
    ... werden nun durch ihre HTML konforme Ersatzschreibweise dargestellt.

Vorhandene "Carriage Return" Zeichen werden nun ersetzt durch das Pipe Symbol |.

Es werden nun auch "multi-value" GENRE Werte ausgegeben.

Export_HTML_Liste_Alles.v2.zip (1.59 KB)

DD.20110311.1818.CET
Edit.20110311.2135.CET

Export_HTML_Liste_Alles.v2.zip (1.59 KB)

Ja das mit diesen kleinen Fehlern, das ist immer so eine Sache, besonders wenn man davon ausgeht, dass das, was man von irgendwoher kopiert hat, auch in Ordnung sei.

Deshalb habe ich mir ja auch einen HTML Export selbst geschrieben, der technisch gesehen voll auf meinen eigenen Entwicklungen aufsetzt zur praktischen Nutzung der eigentlich undokumentierten Funktion $list(), die du ja in deinem Export Skript ebenfalls benutzt hast.
Selbstverständlich gebührt der Dank für die $list() Funktion dem Entwickler Florian Heidenreich.

tiggerle, was mir an deiner Vorlage gefallen hat, das ist die inverse Farbgestaltung, die die Ausgabe von vielen unterschiedlichen Tag-Feldern mit ihren Inhalten in der spaltenorientierten Darstellung einigermaßen übersichtlich und auch recht gut lesbar macht.
Aber mehr als diese Idee habe ich wirklich nicht in meine Arbeit einfließen lassen.
Vielen Dank für diese gestalterische Anregung, die du hier in diesem Thread der Öffentlichkeit zur Verfügung gestellt hast.

Wenn du meinst, mein Skript täte dasselbe wie dein Skript, dann magst du - oberflächlich gesehen - vielleicht diesen persönlichen Eindruck haben, klar, es wird eine Tabelle ausgegeben.

Aber schaue 'mal genau hinein in die Skripte, wie was realisiert wird, und auch was ausgegeben wird, vielleicht erkennst du dann den Unterschied zwischen den beiden Skripten.
Ich meine damit nicht die unterschiedliche Farbgestaltung.

DD.20110311.1850.CET

Wir können also alle sehen: Es wird kein Fehler benannt, aber eine weitere Beleidung hinterhergeschoben. Ich habe klar angegeben, dass das Styling auf dem mitgelieferten Export-Script beruht. Die nur im Forum auftauchende Funktion list() könnte im Übrigen besser dokumentiert werden, ich habe stundenlang herumexpermentiert mit dieser und anderen Funktion wegen fehlender Dokumentationen. Da ich aber aus eigener Erfahrung weiß, dass Entwicklungsarbeiten viel zeit kosten ist auch klar, dass eben nicht alle Bedürfnisse aller erfüllt werden können. Sei's drum: Wer des Code-Lesens mächtig ist, weiß, dass ich nicht einfach nur eine Code-Zeile kopiert habe - eine unnötige Stichelei also...

Was genau war bitte die technisch eigene Entwicklung? Die list-Funktion von Florian? Das html-Gerüst, das von mir übernommen, geändert und dann von detlev weiter verwendet wurde? Jeder, der lesen kann wird sehen, dass sich die Codes stark gleichen, meine Separatoren durch andere ersetzt wurden und der Spaltenaufbau in eine Schleife mit zusätzlichen regexpr verpackt wurde. Zufälliger Weise ist eines der zentralen Probleme, dass ähnliche erweiterte tags wie beispielsweise "albumblablaba" von den standardtags unterschieden werden, auf die gleiche Art gelöst worden. Jeder, der Programmieren kann, weiß, dass man Code immer leicht umschreiben kann, es immer mehrere ähnliche Wege gibt, um zu dem gleichen Ergebnis zu kommen. Das ist im Prinzip genau dasselbe, wenn sich bei Herrn Gutenberg 5 Sätze aus einer anderen Doktorarbeit leicht umgeschrieben in seiner eigenen wieder finden und er durch das Umformulieren den Anschein erwecken will, es wären ja alles seine eigenen Gedankengänge gewesen.

Schön, das auch einmal positive Worte fallen. Es hätte völlig gereicht zu sagen "ich habe tiggerle's skript umgeschrieben WEIL dieses oder jenes so nicht funktioniert/so besser funktioniert..." - hätte ich eventuell etwas gelernt dabei, wäre auch klar gewesen, dass meine Zeitinvestition geschätzt wird. Jeder, der in foren, bei open-source projekten etc beiträgt invesitert unentgeltlich seine zeit und daher ist im allgemeinen der gegenseitige respekt selbsterständlich und auch allgegenwärtig. Bezeichnender Weise wurde aber auch auf Nachfrage nicht dargelegt, was denn nun das Problem gewesen wäre - statt dessen nur Gehässigkeiten ...

Danke für die Unterstellung, ich hätte nicht mal das Skript gelesen. Siehe Antwort weiter oben; ich gehöre zu den Leuten, die zuerst denken und lesen, bevor sie schreiben. Klar hatte ich die Skripts schon damals verglichen - es ändert nichts daran, dass hier alles verschleiert wird mit einem äußerst unfreundlichen Unteron statt konkrete Punkte aufzuzählen.

Auch wenn wenn unter den über 2600 Posts viele hilfreiche und sinnvolle gewesen sein mögen, auch ein guter Ruf ist schnell ruiniert. Muss man hier seine akademischen Titel und Referenzen auf Tätigkeiten im Business mitposten um nicht herablassend als Kleinkind behandelt zu werden? Einfach nur traurig, anderen Leuten keine Freude gönnen zu wollen, selbst keine Fehler eingestehen zu können und schlechte Laune zu verbreiten. Gegen Unfreundlichkeit gibt es leider kein Rezept.

End of Line.

Hiermit mache ich meinen originären Schöpfungsanteil geltend zur praktischen Verwendung der Mp3tag Funktion $list für Mp3tag Benutzer. Der Autor der Funktion $list ist Florian Heidenreich.

Hier im Forum habe ich am "Mar 4 2007, 23:42" in meinem Artikel ...
How to get a list of all current tags from a mp3 file?
... erstmals den Nutzen dieser Mp3tag Systemfunktion praktisch demonstriert mit zwei Kodierungsbeispielen und Exportskripten. Zuvor gab es nichts dergleichen.

Alle weiteren Verwendungen von $list, die hier im Forum jemals veröffentlicht worden sind, und die die Begrenzerzeichen Carriage Return und Linefeed zusammen mit der Funktion $regexp benutzen, gehen auf diese erste Veröffentlichung zurück.

In den Jahren danach habe ich mehrfach dazu beigetragen mit Artikeln und Hilfestellungen für Mp3tag Benutzer, dass diese von Florian Heidenreich entwickelte Funktion ihre Nützlichkeit praktisch beweisen konnte.

In meinem Artikel am "Apr 6 2009, 15:28" habe ich die Funktion $list mit weiteren Beispielen für den allgemeinen Gebrauch dokumentiert:
Lyrics aus Datei importieren?

Es gibt immer wieder Mp3tag Benutzer, die meine Veröffentlichungen brauchbar finden und für sich nutzen können, und im Allgemeinen war das bisher alles völlig in Ordnung, solange es sich im 'fair use' Bereich befindet.

Ich erinnere mich oft daran, als ich im Jahr 1995 auf der Konferenz "Two BBSCON" die Vorstandsvorsitzende der "Electronic Frontier Foundation", Esther Dyson, kennengelernt habe und ihre überaus bedeutende Rede miterleben durfte zum Thema "Free Software" und deren Nutzen für die Allgemeinheit.

Das Miteinanderteilen von Kenntnissen und Erfahrungen ist der Treib- und Klebstoff unserer Zivilisation.
Bei diesem Projekt helfe ich gerne mit.

Mit freundlichen Grüßen an die Mp3tag Community
Detlev Dalitz

DD.20110319.2111.CET

Zum Thema selber kann ich nicht beitragen nur, die schöpferische Arbeit, die geduldige Weitergabe
der Kenntnisse die manch ein User hier im Forum unentgeltlich den fragenden Mp3tag-Nutzern
entgegenbringt, zeugt doch daraus, gleichgesinnten die beim taggen der vielen Variationen von Dateien
Probleme haben sofern es in die Skriptsprache geht (ego einbezogen), helfen zu wollen.

Wo wären wir denn heute wenn's die digitale Welt, ja selbst das Binäre System nicht gäb?

Ego, von meiner Warte aus kann mich nur freuen, wenn mir auf meine, und seien sie noch so Quarkmäßig geschrieben die Eröffnungspostes, eine helfende Hand, ein Skript oder nur den Baum im Wald gezeigt bekomme.
Wer hilft/helfen will, ist bestimmt auch ein User dem auch geholfen wird/wurde!

"learning by doing - doing by learning"

Cu schönes Weekend

Von mir hört man wahrlich nicht viel, da ich immer ohne eine Frage zu stellen meine Antworten bekomme. Und ich kenne mich mit diesem Code schon mal gar nicht aus.
Es ist ein super Programm, es ist hier ein super Forum, ich als absolute nur Anwenderin bin sehr zufrieden.
Das einfach mal so in die Runde werfend.

Hallo, ich habe DetlevD's Exportskript und Kommandozeilenstapelprogramm zu einem neuen Exportskript zusammengefasst. Dieses kann direkt nach dem Export ausgeführt werden. Dadurch kann man einen zusätzlichen Klick einsparen.

cmd_autocolumns.mte (4.09 KB)

cmd_autocolumns.mte (4.09 KB)

Hallo 'Knabbakeks', deine Idee, durch das Zusammenfügen von einem Mp3tag MTE Exportskript mit einem CMD Kommandozeilenskript schließlich einen Mausklick oder so zu sparen, ist prinzipiell eine gute Idee und schon ganz in Ordnung.

Einen Versuch mit dem Kombiskript habe ich gemacht, aber das hat nicht funktioniert.
Vermutlich weil du vergessen hast, bestimmte Sonderzeichen zu 'entwerten', denn ein CMD Skript ist kein MTE Skript.
Beide Skriptsprachen kann man nicht einfach durch Kopieren zusammenfügen, da muss man schon etwas mehr dazu tun.

Deshalb distanziere ich mich ausdrücklich von diesem 'Knabbakeks - Kombiskript'.

DD.20110731.1812.CEST

Hallo DetlevD, ich habe die Skripte nicht einfach zusamenkopiert. Das es sich um zwei unterschiedliche Sprachen handelt ist mir bekannt und ich habe dies durch 'entwerten' bestimmter Zeichen berücksichtigt. Ich hatte nur nicht daran gedacht, dass der Pfad zum APPDATA-Verzeichnis auch Leerzeichen enthalten kann. Mit dieser Version sollte alles einwandfrei funktionieren.

cmd_autocolumns_2.mte (4.1 KB)

cmd_autocolumns_2.mte (4.1 KB)

Hmm, ja das Kombiskript läuft nun durch ... aber es bleibt eine 'unschöne Hauruck-Kopier-Lösung', weil die Reihenfolge der internen CMD Skriptabschnitte unsinnig (geworden) ist.

Deshalb distanziere ich mich ausdrücklich von dem 'Knabbakeks - Kombiskript'.

DD.20110801.0707.CEST

Ergänzung zu Post #6
Nach Anregung durch Benutzer 'Knabbakeks' in Post #21 habe ich das Erzeugen der Liste aller Tag Feld Namen und das Erzeugen der Datei "AutoColumns.ini" in einem Mp3tag Export Skript zusammengefasst.
Das MTE Skript erzeugt ein CMD Skript für den gesamten Prozess.
Das CMD Skript wird auf dem Desktop abgelegt und muss dann vom Benutzer gestartet werden.
Das CMD Skript entfernt sich am Ende selbst vom Desktop.

Version 1.00:
Export_CMD_CreateAutoColumnsIni.mte ( 4.72K ) Number of downloads: 3

Version 1.01:
(Es fehlte ein Punkt an einer bestimmten Stelle.)
Export_CMD_CreateAutoColumnsIni.mte ( 4.72K ) Number of downloads: 32
DD.20110801.1147.CEST

Version 1.02:
(Die Unterstützung für Meta-Tag-Felder ist jetzt eingebaut.)
Export_CMD_CreateAutoColumnsIni.mte ( 4.84K ) Number of downloads: 4
DD.20120603.1900.CEST

Version 1.03:
(Die Erzeugung des Doppel-Backslash für Meta-Tag-Felder war fehlerhaft.)
Export_CMD_CreateAutoColumnsIni.mte (4.84 KB)
DD.20120604.2045.CEST

Export_CMD_CreateAutoColumnsIni.mte (4.84 KB)

Hallo DetlevD! Vielen Dank für dieses praktische Skript. Es funktioniert einwandfrei und ich verwende es oft, da es unkompliziert und direkt den kompletten Überblick aller vorhandenen Tag-Felder ermöglicht.

Da ich oft auch Multi-Value Tag-Felder verwende wäre es ganz nützlich wenn man mit dem Skript diese auch anzeigen könnte. Ich habe schon versucht das Skript dementsprechend zu modifizieren und zwar indem ich Zeile 115 von

'ECHO.value^=%%%%a%%>>"%FILE_INI%"'

nach

'ECHO.value^=$meta_sep^(%%a,\\^)>>"%FILE_INI%"'

geändert habe.

Das brachte aber nur einen Teilerfolg. Zwar werden jetzt alle Multi-Value Tag-Felder korrekt angezeigt, jedoch nicht mehr die Werte für _FILENAME und _FOLDERPATH. Das liegt wohl daran das es hierfür laut Definition keine Multi-Value Felder geben kann. Diese Werte müssen dann im Spalten...-Dialog noch manuell in die Standard Werte korrigiert werden um alles korrekt anzuzeigen.

Es ist bestimmt möglich das Skript so weiterzuentwickeln, das _FILENAME und _FOLDERPATH die richtigen Werte anzeigen und alle anderen Tag-Felder als Multi-Value Tag-Felder dargestellt werden. Meine Programmierkenntnisse reichen dazu leider nicht aus.

Knabbakeks, Dank für die Anregung!

Dafür die betreffende Zeile im Skript austauschen ...

' ECHO.value^=$if^($neql^($meta^(%%a,1^),^),$meta_sep^(%%a,''''^\^\^\^\''''^),%%%%a%%^)>>"%FILE_INI%"'

DD.20120603.1515.CEST
Edit.20120604.2045.CEST