Scripting: mehrere Tagfelder in einer Aktion

Aktuell lassen sich in den Aktionen (z.B. in der "Ersetzen"-Aktion) unter "Feld" immer nur ein Name angeben, auf das die Aktion durchgeführt wird.

Ich hätte gerne, dass dort auch mehrere (durch ';' getrennt) angegeben werden können und dann die Aktion auf alle angegebenen Felder angewendet wird - quasi in einer Schleife...

Wenn ich aktuell die gleiche Ersetzung auf mehreren Feldern durchführen möchte, muss ich das ganze immer mehrmals kopieren und für jedes Feld eine eigene Aktion machen.
Bei Änderungen an der Ersetzung dann wieder alle ändern...
...das würde stark vereinfacht, wenn man mehr wie ein Feld angeben könnte!

Das eben für alle Aktionen, bei denen es Sinn mach (Ersetzen, Regulärer Ausdruck, Tag-Feld formatieren, ...)

Ergänzend wäre es dann noch gut, wenn innerhalb der Aktion das "Pseudo"-Variable "_CURRENT" zur Verfügung stünde, das den Inhalt des aktuellen Felds zur Verfügung stellt.
Wenn dann z.B. in der Aktion "Tag-Feld formatieren" als Felder "ALBUM;ARTIST;TITLE" gesetzt sind, könne man im Formatstring z.B. "$trim(%_CURRENT%)" schreiben.

Ich habe zwar keine Ahnung von der Programmstruktur, ich denke aber das sollte relativ einfach zu implementieren sein und auch so machbar sein, dass es zu den bisherigen Scripten kompatibel ist - was meinst Du, Florian? :smiley:

Zunächst erst einmal eine Frage: kennst du das Mp3tag Prinzip "Aktionengruppe" und benutzt du es schon?

Noch eine Frage: Meinst du mit englisch "current" das deutsche Wort "Strom" oder das deutsche Wort "aktuell"?

DD.20171117.0959.CET

Ja natürlich - aber da kann ich doch "nur" Aktionen hintereinander reihen und unter einem Namen gemeinsam ausführen?!
Ich kann bei einer Aktionsgruppe doch keine Felder vorgeben, für die die gelten soll? Oder doch?
Wenn ich z.B. sowohl bei den Feldern ALBUM, ARTIST und TITLE das gleiche ersetzen möchte, muss ich in der Gruppe drei gleiche Aktionen anlegen - oder geht das anders?
Ich bin durch Deine Frage etwas verwirrt?! :unsure:

Ich meinte es in der Bedeutung von "aktuelles Feld", d.h. wenn dann intern durch die angeg. Liste der Felder gegangen wird und die Aktion für jedes Feld ausgeführt wird - kam das in meinem "trim"-Beispiel nicht richtig rüber?
So wie "_ALL" für alle vorhandenen Felder steht, eben "_CURRENT" für das aktuelle...

Ich weiß nicht, ob das wirklich so ein riesiger Schritt nach vorne wäre.
Gerade die von dir angesprochenen Funktionen zum Ersetzen und auch "Formatieren" ließen sich mit Script-Funktionen und der Aktion "Tag-Feld importieren" für mehrere Felder anwenden:

Nehmen wir an, du möchtest die Daten in ARTIST und TITLE in Kleinbuchstaben verwandeln, dafür aber nur 1 Aktion schreiben, dann ginge das wie folgt:
Aktion vom Typ "Tag-Felder importieren"
Quelle: $lower(%artist%==%title%)
Format string: %artist%==%title%

Oder für die Aufgabe mit $trim:
Quelle: $trim(%artist%)==$trim(%title%)
Format String: %artist%==%title%

Das == ist übrigens kein Zwang für diese Variante des Datenimports, es dient nur als eindeutiges Trennzeichen zwischen den Datenbereichen für die zu importierenden Felder.

Ist ein bisschen sehr durch die Brust ins Auge, zugegeben - aber es geht schon jetzt.

Die Funktionen zum Ersetzen als Aktion sind die dialoggeführte Variante der $Replace()-Funktion, die vielleicht mehr an die von anderen Programmen bekannte Suche-und-Ersetzen-Funktion erinnert als eine Zeichenkette wie $replace(%artist%,The,).
Für $trim() gibt es die dialoggeführte Variante übrigens nicht.

Es wäre (für mich) einfach nur logisch, dass man in das obere Feld bei den feldbezogenen Aktionen mehrere, durch Strichpunkt getrennte Feldnamen angeben kann.
Die gesamte Funktionalität würde keine Kompatibilität brechen (weder in der Funktionalität noch in der Syntax innerhalb der .mta-Dateien) und wäre (ohne Kenntnis der Internas) nach meiner Einschätzung auch relativ einfach zu implementieren...
Und für mich (wieder einmal :wink: ) wäre es eine starke Erleichterung und würde v.a. das fehlerträchtige "ich habe das jetzt in einer Aktion geändert und muss das jetzt nach 'zig anderen Aktionen kopieren" weg rationalisieren!

Warum also nicht? Muss alles immer ein "riesiger Schritt" nach vorne sein?
Auch mit kleinen Schritten kommt man voran - oft auch gleichmäßiger als mit riesigen Umwälzungen... :laughing:

Ich muss gestehen, dass mir die von Dir geschilderte Möglichkeit, das umzusetzen unbekannt war - ich finde es aber sehr "von hinten durchs Knie"; und ich bin auch nicht sicher, ob das mit allen (teilweise sehr komplizierten) Aktionen funktioniert - insbesondere mit regulären Ausdrücken, bei denen in der Ersetzung dann die $1, $2, etc. vorkommen...

Sorry, da bin ich nicht ganz mitgekommen, was Du meinst :flushed:
Wieso sind Funktionen in Aktionen "dialoggeführt"?

Ich komme aus der Programmiererecke und finde es total genial, was man mit mp3tag und seinen Aktionen/Aktionsgruppen machen kann - allerdings sehr unübersichtlich und oft auch umständlich; da würde ich mir mehr eine "Programmierumgebung" und Elemente einer Programmiersprache wünschen...
...aber das ist wohl ein anderes (komplexeres) Thema :smiley:

Ich kann mir, ehrlich gesagt, nicht vorstellen, dass du in mehreren Feldern die gleichen Muster hast, die mit regulären Ausdrücken bearbeitet werden können.

Es gibt Aktionen, die auch mit Scripting-Funktionen abgebildet werden können:
Ersetzen ->$replace()
Ersetzen mit regulärem Ausdruck -> $regexp()
Schreibweise -> $caps(), $caps2(), $caps3(), $upper(), $lower()
mehr fallen mir nicht ein aus der Liste der Aktionen:

Album-Cover aus Datei importieren
Album-Cover exportieren
Codepage konvertieren
Doppelte Tag-Felder entfernen
Doppelte Tag-Felder zusammenfassen
Ersetzen
Ersetzen mit regulärem Ausdruck
Export
Schreibweise
Tag-Feld aufteilen
Tag-Feld formatieren
Tag-Felder entfernen
Tag-Felder entfernen außer
Tag-Felder importieren
Text-Datei importieren

Um die "Dialogführung" zu verdeutlichen am Beispiel für das Aktions-Äquivalent für $replace(), fragt der Dialog ab:
Feld
Suchen-String
Ersetzen-String
In der Funktion $replace() sind dies $replace(string,from,to) oder $replace(string,from1,to1,from2,to2,...)
Aktion und Funktion sind, zugegeben, nicht deckungsgleich.

Die vielleicht mächtigste Aktion "Tag-Feld formatieren", in der man Format-Strings angeben kann, die aus dem vollen Vorrat der Scripting-Funktionen schöpfen, ist vielleicht die einzige Funktion, in der häufig mehrere Felder adressiert werden. Aber für genau diesen Fall kannst du die Feld-Liste in einer Aktion vom Typ "Tag-Felder importieren" nachbilden, so wie ich es beschrieben habe.

Zeig doch mal ein konkretes, am besten komplexes Beispiel, wo eine Aktion auf mehrere Felder angewendet wird.

Hi,
ich teile den Wuinsch und die Idee von MatthiasM zu "mehrere Tagfelder in einer Aktion"
Finde allerdings zu diesem 3-Jahre alten Topic keine Fortsetzung; Welche Beispiele wurden diskutiert?

Hier meine Beispiele:

  1. Bsp. In den Tag-Feldern ARTIST ARTISTSORT SOLOISTS & SOLOISTSSORT soll "; " (Semikolon mit Leerstelle) durch ";" (Semikolon ohne Leerstelle) ersetzt werden..
    Umsetzung:
  • mit der Aktion ERSETZEN: 4 Aktionen; für jedes gewünschte Tagfeld eine Aktion
  • mit der Aktion TAGFELD FORMATIEREN ?
    -> Formatstring = $replace(%artist% - %artistsort% - %soloists% - %soloistssort%,; ,:wink: könnte dies ausführen.
    ABER:
    Was soll man unter "Feld" eingeben, damit es funktioniert?
    -> ARTIST;ARTISTSORT;SOLOISTS;SOLOISTSSORT
    -> ARTIST - ARTISTSORT - SOLOISTS - SOLOISTSSORT ?

2.Bsp:
In den Tag-Feldern ARTIST ARTISTSORT SOLOISTS & SOLOISTSSORT soll ";" gegen einen Zeilenumbruch "\r\n" getauscht werden.
Umsetzung:

  • mit der Aktion ERSETZEN MIT REGULÄREM AUSDRUCK möglich: 4 Aktionen; für jedes gewünschte Tagfeld eine Aktion
  • mit der Aktion TAGFELD FORMATIEREN ?
    -> Formatstring = $regexp(%artist% - %artistsort% - %albumartist% - %albumartistsort% - %soloists% - %soloistssort%,;,\r\n)
    würde das gewünschte Ergebnis erzielen;

ABER: Was soll man unter "Feld" eingeben, damit es funktioniert?

Gruß, Lerob

Hast du dir das Beispiel in

angesehen?
Und dann ganz ehrlich: welcher Abspieler kommt denn damit klar, im Sortierfeld Absätze zu verarbeiten?

Hallo Ohrenkino,
hatte nicht mit einer so schnellen Antwort gerechnet. Du bist ganz unglaublich. :astonished:

Ja doch, ich hatte Deine Beispiele gelesen. Aber ich bin über die Inkonsequenz von mp3tag gestolpert, dass bei der Aktion "Tag-Felder importieren" - im Gegesatz zu anderen Aktionen - der Scriptausdruck nicht im Eingabefeld "Formatstring" einzutragen ist, sondern unter "Quelle".

Gewohnheitsmäßig hatte ich meinen Scriptausdruck wie immer unter "Formatstring" eingetragen. Hier ist es also 'mal anders.
Quelle: "$replace(%artistsort% - %albumartistsort% - %soloistssort%,; ,;)"
und
Formatstring: %artistsort% - %albumartistsort% - %soloistssort%

Das heißt: "Scripting: mehrere Tagfelder in einer Aktion" funktoniert !

welcher Abspieler kommt denn damit klar, im Sortierfeld Absätze zu verarbeiten?

ROON; Der Player heißt "Roon". Innovativ, sehr ansprechend und vorallem bietet Roon unglaublich viel umfassende, zusätzliche Informationen zu den eigenen Audios. Denn Roon arbeitet mit einer eigenen riesigen Datenbank im Hintergrund.

Damit Roon mehrere Interpreten (in einem Personen-Tag-Feld) als unterschiedliche Personen identifizieren kann, müssen diese in den jeweiligen Tag-Feldern untereinander (Zeilen / Absätze) geschrieben stehen.
Du glaubst nicht, wielange ich gebraucht habe, um dies herauszufinden.

Ich danke Dir also nochmals ganz herzlich für Dein Feedback. :+1: 'Nen schönen Abend. Lerob

Die Logik bei "Tag-Felder importieren" ist eigentlich, dass ein String erzeugt wird, der keine Referenz mehr zu Feldern hat (auch wenn der Inhalt von Feldern genommen wird).
Letztlich ist "Tag-Felder importieren" die universellere Funktion zu Konverter>Dateiname-Tag, da bei der Aktion jeder String genommen werden kann, nicht nur der Dateiname.
Und wenn man jetzt weiter spinnt: eigentlich ist "Tag-Felder importieren" in "Quelle" der Konverter>Tag-Filename - da entsteht aus strukturierten Feldern ein mit Scripting-Funktionen aufbereiteter String - und in "Format String" der Konverter>Dateiname-Tag - wo ein vorgefundener String in strukturierte Felder umgewandelt wird.

Danke. Da hab' ich 'was zum Grübeln. Man lernt nie aus.