Lade...
 

String (Command)

String

String(, flags), String

Parameter:  Flags für ViewExport

Stack
Stack Position Beschreibung
Stack(In) Top beliebig
Stack(Out) Top eine Zeichenkette

Das auf dem Stack-Top vorgefundene Element wird in eine Zeichenkette transformiert. Handelt es sich um ein Objekt, so wird dafür die Funktion ViewExport aufgerufen und im zweiten Parameter angegebene Flags steuern die Ausgabekonvertierung.
Mehrere Flags können durch Plus verbunden werden: String( , flag1+flag2+ ... +flagn)

 

String(fmtString, flags), String(fmtString), String(STACK)

Parameter:  Formatstring für sprintf, Flags für ViewExport

Stack
Stack Position Beschreibung
Stack(In) Top Element n
  Top-1 Element n-1
  . . . . . .
  Top-n Element 1
Stack(Out)   eine Zeichenkette

Als Parameter ist ein Formatstring nach dem Schema der Formatelemente anzugeben. Wie viele Werte vom Stack genommen werden, bestimmt die Anzahl der Formatelemente. Die Interpretation der Formatelemente entspricht ziemlich der printf-Funktion der C-Standardbibliothek. Element i vom Stack korrespondiert mit dem i-ten Formatelement, d.h. die Datenelemente erscheinen im InstantView®-Code in der gleichen Reihenfolge wie die Formatelemente im Formatstring. Die '.precision'-Angabe beachtet die Zeichen des Arguments selbst, weshalb auch UTF8-Zeichen korrekt gekürzt werden.

String() verarbeitet Formatstrings auf gleiche Weise wie die mehrsprachige Funktion MLString.

Als Ergebnis erhält man eine Zeichenkette auf dem Stack-Top. Wenn - durch ein Formatelement %s verlangt - ein Objekt vom Stack in eine Zeichenkette zu transformieren ist, wird das (optional) im zweiten Parameter angegebene Flag benutzt .

Hierzu einige Beispiele:

 

25 5 "abcde" String("k=%0*d, s=%.4s")

// Result: "k=00025, s=abcd"
// The same result deliveres:

25 "abcde" String("k=%05d, s=%.4s")

 

// If the first zero will be left away like:

25 "abcde" String("k=%5d, s=%.4s")

// The result is "k=   25, s=abcd"

 

// A minus sign like this:

25 "abcde" String("k=%-5d, s=%.4s")

// Will deliver "k=25   , s=abcd"

 

 

Zur Erklärung dieses Ergebnisses:

Von links an wird nach einem passenden Objekt für den angegebenen Filter gesucht.
Die Formatanweisung besteht grob gesehen aus zwei Platzhaltern: %d und %s

 

k=%0*d // Abstract k=%d

 

%d ist eine ganze Zahl. Es wird von links an geprüft, ob eine ganze Zahl da ist. Die 25 wird gefunden und vom Stack entfernt
Das %d ist noch durch zwei weitere Angaben ergänzt: Ein Steuerzeichen (führende Nullen oder Vorzeichen...) und die Präzision, wieviele Stellen das Ergebnis haben soll.
Hier steht eine 0 direkt hinter dem %, was bedeutet, dass führende Nullen bis zur gewünschten Gesamtlänge (Präzision) der Zahl aufgefüllt werden.
Nun ist da noch ein Stern in der Anweisung. Ein Sternchen ist ein Platzhalter für irgendeinen Stack Eintrag, der gefunden wird. Es wird die 5 gefunden und als Präzision benutzt.
Das Ergebnis ist also eine Zahl, die mit führenden Nullen 5 stellen lang ist. Die Zahl selbst ist 25. Das Ergebnis ist "00025".

 

 

s=%.4s // Abstract s=%s

 

%s ist eine Zeichenkette (String). Es wird wieder geprüft, was noch auf dem Stack vorhanden ist. "abcde" wird gefunden.
Nun steht auch hier noch ein Steuerzeichen zwischen % und s. Nämlich die .4. Auch dies ist hier die Präzision (Gesamtlänge). Der String wird also auf 4 Stellen gekürzt. Das Ergebnis ist "abcd". Das "e" wurde abgeschnitten. Ist die Präzision länger als die Gesamtlänge des Eingangsstrings, passiert nichts, wenn vor der Zahl ein Punkt steht (%.4s). Ist anstatt des Punktes wieder eine Null vorhanden, wird ebenfalls mit führenden Nullen bis zur gewünschten Gesamtlänge aufgefüllt:

 

"abcde" String("%08s") // Result is "000abcde"

"abcde" String("%.8s") // Result is "abcde"

 

Für weitere Beispiele und Erklärungen, siehe auch: Beschreibung Formatelemente

Verwandte Themen