Wie bekomme ich einen Punkt oder Unterstrich nach einem abgeschnittenen Text?
Auf wieviel Zeichen ist denn eigentlich ein Dateiname begrenzt?
Am liebsten wäre es mir wenn die vollen Zeichen ausgenützt werden, ich weiss jetzt nicht wie ich es erklären soll?
Auf jeden Fall sollte am Anfang eines Dateinamens # Info # und am Ende (Jahr) stehen. Die restlichen Komponenten müssten miteinander verglichen werden. Der linke Teil soll voll ausgeschrieben werden und der recht nach der Zeichenbegrenzung abgeschnitten und durch einen Punkt gekennzeichnet werden.
Hallo Mick, als langjähriger Benutzer von Mp3tag und des Forums stellst du Fragen, die schon von anderen Benutzern immer wieder aufgeworfen und diskutiert und beantwortet worden sind.
Trotzdem zu diesem Thema auch von mir noch einmal eine kurze Antwort.
Das ist in Mp3tag eine Zeichenkette, die nur das Punktzeichen enthält: '.'
Das ist in Mp3tag eine Zeichenkette, die nur das Unterstrichzeichen enthält: '_'
In der Mp3tag Skriptsprache ist die Verwendung von Zeichenkeitten teilweise auch ohne die Verwendung von Zeichenkettenbegrenzerzeichen erlaubt, also kann man Punkt und Unterstrich direkt als eigenständiges Literal benutzen: . _
Zwei Zeichenketten 'zwei ' 'Worte'
werden in Mp3tag miteinander verbunden, indem man sie nebeneinander schreibt: 'zwei ''Worte'
oder 'zwei Worte'
oder einfach zwei Worte
Bei der Erzeugung von Ordnernamen und Dateinamen sind die dafür bestimmten Regeln und Einschränkungen zu beachten, z. B. Eindeutigkeit der Namen, erlaubte Zeichen, Länge des Namens.
Neben den technischen Regeln kann man sich auch noch persönliche Regeln auferlegen.
So zum Beispiel: Vermeidung von Redundanz. Warum im Dateinamen einer Musikdatei alle die Informationen wiederholen, die in der Datei selbst z. B. im ID3-Tag schon abgelegt sind?
Player und Katalogsysteme schauen in erster Linie in den ID3-Tag und übernehmen die dort gespeicherten Werte, erst wenn es von dort nichts zu holen gibt, dann wird zuguterletzt der Dateiname verwendet.
Die Unterscheidbarkeit und Zugehörigkeit regele ich so:
Nicht lateinische Schriftzeichen werden nach Möglichkeit in lateinische Schriftzeichen transskribiert.
Eine Musikdatei hat einen maximal 64 Zeichen langen Namen (Leerzeichen und Sonderzeichen sind nicht erlaubt, es gibt Gestaltungsregeln jeweils für Titel, Artist, Album und maximale Teillängen), z. B. 03_EyesightToTheBlind_Aerosmith_HOB_2004.mp3
Zusammengehörige Dateien (Titel) liegen in einem Ordner (Album) (Leerzeichen und bestimmte Sonderzeichen sind erlaubt), z. B. 2004 - Honkin' On Bobo
Zusammengehörige Ordner (Alben) liegen in einem Ordner (Artist), z. B. Aerosmith
Zusammengehörige Ordner (Artisten) liegen in einem Ordner (Erster Buchstabe von Artist), z. B. A
Zusammengehörige Ordner (Erster Buchstabe von Artist) liegen in einem Ordner (Musikklasse), z. B. Rock
Zusammengehörige Ordner (Musikklassen) liegen in einem Ordner (Medienart), z. B. Musik
Somit lassen sich die Basisinformationen der betreffenden Datei aus dem Dateipfad ablesen (z. B. hier nur 93 Zeichen lang): M:\Musik\Rock\A\Aerosmith\2004 - Honkin' On Bobo\03_EyesightToTheBlind_Aerosmith_HOB_2004.mp3
Alle anderen speziellen Daten und Informationen befinden sich in der Datei selbst.
Es sieht so aus als solle mit dieser Anweisungsfolge ein Dateiname für eine Report Textdatei erzeugt werden.
Mal schauen, was dabei herauskommt, wenn man diese Konstruktion in ihre Einzelteile zerlegt.
Der Dateiname soll beginnen mit einem einfachen Text: #' Info '#
Das kann man auch so schreiben: '# Info #'
oder # Info #
Dann soll das Ergebnis von zwei ineinander geschachtelten $if-Klauseln folgen.
Nach den $if-Klauseln soll in Abhängigkeit von einem existierenden Tag-Feld TITLESORTORDER der Text 'Vol. ' zusammen mit dem numerischen Teil des Inhalts von TITLESORTORDER ausgegeben werden.
Danach soll der Inhalt des Tag-Felds YEAR in runden Klammern ausgegeben werden.
Die $if-Klauselstruktur sieht korrekt aus.
Ungewöhnlich ist die aber Notation bei den verwendeten $left() Funktionsaufrufen.
Notiert wurde: $left(%album%,28.)
Die Syntax-Definition sagt: $left(x,n) ... Leftmost n characters of text x.
Die Anzahl von Zeichen wird gewöhnlich als eine ganze Zahl definiert.
Offensichtlich akzeptiert Mp3tag bei der Funktion $left(x,n) für die Zahl n auch eine Dezimalzahl.
Im Beispiel ist es die Dezimalzahl 28.0 in englischer Schreibweise.
Man kann z. B. auch solche Dezimalzahlen schreiben: $left(%album%,8.2) $left(%album%,8.7)
Andere Programmiersprachen würden andieser Stelle sicher einen Datentyp-Fehler melden, aber Mp3tag toleriert diesen Fehler ohne Fehlermeldung.
Übrigens rundet Mp3tag den Dezimalwert nicht zur nächsten Ganzzahl ab oder auf, sondern vernachlässigt einfach den Nachkommawert.
Nun kommen wir zu der Frage wie man in Mp3tag zwei Werte für die Textausgabe verbindet.
Andere Skriptsprachen haben für diesen Zweck besondere Schreibweisen und Funktionen, so z. B. bei der Verkettung von Zeichenketten: MyString = “Hello ” + “World”;
oder MyString = StrCat (“Hello”, " ", “World”)
oder MyString = Hello : ' ' : "World"
oder MyString = “Hello”
MyString += “ World”
Die Mp3tag Skriptsprache bietet eine derartige Unterstützung nicht.
In der Mp3tag Skriptsprache werden zwei Werte einfach im Skript nebeneinander geschrieben und sind dadurch zusammengefügt.
Notiert man z. B. 'Lieber '%ARTIST%', dein Album "'%ALBUM%'" finde ich gut.'
oder Lieber %ARTIST%, dein Album "%ALBUM%" finde ich gut.
... dann werden die Platzhalter mit den Inhalten der aktuellen Tag-Felder gefüllt und der Text drumherum bleibt unberührt so wie er ist.
Wenn man also irgendwo im Ausgabetext ein Punktzeichen benötigt, dann schreibt man es einfach an die passende Stelle im Skript.
Dabei muss man die Syntax der Funktionen der Mp3tag Skriptsprache beachten.
Einen Punkt, den man ausgeben will, sollte man deshalb nicht als Dezimalpunkt bei einer Zahl verwenden, die als Parameter in einer Funktion dient.
Falsch: $left(%album%,3.)
ergibt: Abc
Richtig: $left(%album%,3).
oder $left(%album%,3)'.'
ergibt: Abc.