Nach Längenbegrenzung Punkt

Hallo an alle Tagger!

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.

Mein String sieht derweil so aus

#'   Info   '# $if($eql($left(%genre%,4),hoer),$if($eql(%album%,%title%),$left(%artist%,31) - $left(%album%,28.),$left(%album%,31) - $left(%title%,28.)),$left(%band%,31) - $left(%album%,28.)[ Vol. $num(%titlesortorder%,2)]) (%year%).txt,ansi

Internette Grüsse
Mick

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.

Die zur Verfügung stehende Länge für den Namen eines Ordners oder einer Datei und des Dateipfades hängt vom jeweiligen Dateisystem ab, in dem die Datei abgelegt und verwaltet werden soll (Festplatten- oder CD-Dateisysteme oder international gültige Schriftzeichen).
Siehe dort:
Dateiname
http://de.wikipedia.org/w/index.php?title=...;oldid=71603944
Dateisystem
http://de.wikipedia.org/w/index.php?title=...;oldid=74600815

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.

DD.20100602.0815.CEST

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.

DD.20100602.1043.CEST