Lade...
 

MLString (Command)

MLString

220718

MLString(fmtString, ...) | MLString(STACK, ...)

Parameter: Formatstrings (einer pro Sprache) oder der Platzhalter 'STACK'

 
Stack Position Beschreibung
Stack(In) Top ggf. Formatstring
  Top-1 Element zum Einsetzen
  Top-2 Element zum Einsetzen
  ... ...
Stack(Out) Top ML_STRING


Funktionsbeschreibung

MLString verarbeitet auf dem Stack vorgefundene Elemente anhand verschiedener übergebener Formatstrings in verschiedenen Sprachen zu einer Zeichenkette. Dabei korrospondiert immer ein Formatstring mit einer resultierenden Zeichenkette. Formatstrings können ausgewählte, auf dem Stack vorhandene Elemente individuell verarbeiten und einsetzen. 

An MLString werden lediglich die Formatstrings selbst übergeben. Entweder direkt als String-Parameter, oder als MLString-Element vom Stack-Top mittels des Schlüsselwortes STACK als Parameter. Es können ggf. auch mehrere Formatstrings vom Stack-Top genommen werden. Die zu verarbeitenden Elemente werden (ggf. nach den Formatstrings) immer vom Stack-Top genommen.

Elementeinsatz:

MLString analysiert alle Formatstrings bezüglich der Anzahl der mindestens auf dem Stack benötigten Elemente zum vollständigen Verarbeiten. Es wird daher auch nur diese präzise Anzahl an Elemten vom Stack-Top aus gelesen. Weitere Elemente auf dem Stack werden ignoriert. Dabei stellt die Reihenfolge der Stack(In) Befehle die Reihenfolge dar, in der die Elemente in die Formatstrings eingesetzt werden. (Top-2 Element wird vor Top-1 Element eingesetzt)

Beispiele:

Nr. 1: In-Out
"a" "b" "c" "d" MLString("Eins:%s Zwei:%s Drei:%s") Output: "Eins:b Zwei:c Drei:d"

Da nur drei Argumente benötigt werden, und  das Argument "a" auf der Stack Postion Top-4 liegt, wird es nicht gelesen. Die übrigen drei Argumente werden von Top-3 aus bis Top-1 in den Formatstring eingesetzt.

Nr. 2: mehrsprachiges In-Out
"a" "b" "c" "d" MLString("Eins:%s Zwei:%s", "A1:%s A2:%s A3:%s A4:%s") Output: "Eins:a Zwei:b" bzw. "A1:a A2:b A3:c A4:d"

Da die zweite Sprache vier  Spezifizierer enthält, müssen mindestens vier Argumente auf dem Stack liegen. Dass die erste Sprache nur zwei  Argumente benötigt, ist hier irrelevant, jedoch stehen der ersten Sprache ebenfalls alle vier Argumente zur Verfügung, weshalb anders eingesetzt wird, als in Beispiel Nr. 1.

Verarbeitung:

Die Formatstrings werden mit ein paar Zusätzen größtenteils wie in der printf-Funktion aus der standard C-Bibliothek interpretiert. MLString verarbeitet die Parameter mit den Spezifizierern %s, %f, %x, %X sowie %d bzw. %i. Die Syntax der Flags, Breiten- und Präzisionsangaben orientieren sich dabei genau an den printf-Vorgaben. Lediglich die "length"-Option aus printf ist nicht verfügbar.

Bei der Verarbeitung der Elemente kann anstatt der Standardreihenfolge auch mit einen %(Elementnummer)... ein bestimmtes Element verwendet werden. (Die Nummerierung beginnt bei 1 ausgehend vom untersten gelesenem Stack-Element.)  Elemente und Formatstrings werden grundsätzlich immer anhand der Zeichenlänge (nicht der Byteanzahl) verarbeitet.

Beispiele:

Nr. 3: Sub-Specifier
"Abbildung" MLString("%.3s") Output: "Abb"

Das '.3'  stellt in diesem Formatstring den Sub-Spezifizierer  'Precision' dar. bei einem String Specifier wie hier, wird der String auf die gegebene Zeichenlänge zugeschnitten.

Nr. 4: Argumentwahl
"a" "b" "c" MLString("%(3)s") Output: "c" "a" "b" "c" MLString("%s-%(3)s-%s") Output: "a-c-b"

Mit '(3)' wird ein bestimmtes Argument zum Einsetzen ausgewählt. Da im zweiten Beispiel dem zweiten Spezifizierer bereits ein Argument zugeordnet ist, wird  beim dritten Spezifizierer das zweite Argument eingesetzt.

Nr. 5 Mehrfachreferenzen
"a" "b" MLString("%(2)s %s %s %(1)s %(2)s") Output: "b a b a b" // Gleichbedeutend zu: "a" "b" MLString("%(2)s %(1)s %(2)s %(1)s %(2)s") Output: "b a b a b"

Argumente können auch mehrfach in einen String eingesetzt werden. Pro Sprache wird jedem Spezifizierer ohne Argumentnummer aufsteigend bei 1 beginnend, eine Nummer zugewiesen (siehe Äquivalenz zu zweitem Beispiel).

Besonderheiten:

Es ist möglich, Fließkommazahlen als Integer oder String sowie Integer als String oder Hexadezimalzahl zu verarbeiten. Werden als Parameter Objekte an MLString übergeben, deren Export sprachabhängig ist (Bsp: CX_VALUE, ML_STRING), dann werden diese beim Einsetzen in den ML_STRING in der passenden Sprache exportiert.