Lade...
 

FString

FString

FString(editMask, constantText), FString(STACK, STACK)

Stack
Stack Position Beschreibung
Stack(In) Top Zeichenkette (Eingangsstring)
Stack(Out) Top Zeichenkette (Ergebnisstring)

Die einzelnen Zeichen der Zeichenkette vom Stack-Top werden von links beginnend in eine neue Zeichenkette eingeordnet, die als Ergebnis auf dem Stack erscheint. Dieser Vorgang wird durch die Parameter editMask und constantText gesteuert.

Hinweis: Die Verarbeitung entspricht genau der Funktion des Eingabe-Windowobjektes FormattedString, wenn man die Zeichenfolge vom Stack als Eingabestrom betrachtet.

Zeichen in der editMask steuern, welche Zeichen aus dem Eingabestrom, bestehend aus Eingabezeichenkette und konstantem Text, in die Ergebniszeichenkette übernommen werden. Nicht passende Zeichen aus der Eingabezeichenkette werden übergangen.

Zwei Beispiele zeigen diesen Zusammenhang:

       "wxyz"  // Eingabezeichenkette
        FString("KaKaKaKAK", "(.-.-.-.)")

ergibt "(w-x-y-Z)", da die K die Zeichen aus dem konstanten Text und die aA jeweils ein verfügbares Zeichen aus der Eingabezeichenkette übernehmen und

        "D42"  // Eingabezeichenkette
        FString("AK00000", ".-")

ergibt "D-00042".

Maske akzeptiert Eingabezeichen übernimmt
0...0 Ziffernfolge Ziffernfolge bestimmter Länge mit 0 aufgefüllt. Siehe Spezialfall1.
#...# Ziffernfolge Ziffernfolge bestimmter Länge mit Leerzeichen aufgefüllt. Siehe Spezialfall2.
l, L konsumiert kein Zeichen aus Eingabezeichenkette Literal - entsprechendes Zeichen aus constantText wird überlesen (keine Übernahme in Ausgabe)
k, K konsumiert kein Zeichen aus Eingabezeichenkette Literal - entsprechendes Zeichen wird aus constantText übernommen
a Blank oder Buchstabe (A...Z bzw. a...z) übernimmt ein Zeichen aus der Eingabe. Siehe Spezialfall 4.
A Blank oder Buchstabe (A...Z bzw. a...z) übernimmt ein Zeichen aus der Eingabe als Großbuchstabe. Siehe Spezialfall 4.
c Blank, Buchstabe (A...Z bzw. a...z) oder Ziffer (0...9) übernimmt ein Zeichen aus der Eingabe
C Blank, Buchstabe (A...Z bzw. a...z) oder Ziffer (0...9) übernimmt ein Zeichen aus der Eingabe als Großbuchstabe
n, N Ziffer (0...9) übernimmt ein Zeichen aus der Eingabe, Zeichen im  constantText muss eine Ziffer sein
x jedes druckbare Zeichen übernimmt ein Zeichen aus der Eingabe
X jedes druckbare Zeichen übernimmt ein Zeichen aus der Eingabe als Großbuchstabe

Alle Zeichen sind untereinander beliebig kombinierbar. Die Anzahl der Zeichen sollte jedoch exakt mit denen im constantText übereinstimmen, ansonsten kann die Ersetzung/Navigation (im Widget) unvorhersehbar sein.

Die Zeichen 0 und # sind am sinnvollsten als Zeichenfolge zu benutzen (z.B.: 00000 oder #####).

Spezialfall1: Eine Folge von n Ziffern 0 in der editMask bewirkt, dass dem Eingabestrom maximal n Ziffern entnommen werden. Folgt schon vorher ein Zeichen ungleich 0...9, so erscheint die Zahl in der Ausgabezeichenkette trotzdem n-stellig mit führenden Nullen.

Spezialfall2: Eine Folge von n Zeichen # in der editMask bewirkt, dass dem Eingabestrom maximal n Ziffern entnommen werden. Folgt schon vorher ein Zeichen ungleich 0...9, so erscheint die Zahl in der Ausgabezeichenkette trotzdem n-stellig mit führenden Blanks.

Hinweis: Die Zuordnung zwischen Maskenzeichen L,K (Literal) oder N (Ziffer) und dem entsprechenden Zeichen im konstanten Text entspricht der jeweiligen Position. Bei N wird nur geprüft, ob der konstante Text an der Position eine Ziffer enthält. (Da der konstante Text eine zulässige Eingabe sein muss.) Zeichen im konstanten Text, die nicht mit K, L oder N korrespondieren sind beliebig. In den oben gezeigten Beispielen wurden dafür Punkte gesetzt.

Als Spezialfall3 darf die editMask komplett leer (also gleich Leerstring ("")) sein. Der constantText hat in diesem Fall keine Bedeutung. Dies bedeutet, dass keine Formatierung erfolgt. Diese Möglichkeit ist für das Widget FormattedString geschaffen und bedeutet dort, dass dieser unformatiert ist.
Über die Steuerung der editMask (z.B. über den Befehl SetFormat) kann also bestimmt werden, ob das Widget formatiert oder gleich dem Widget String und damit unformatiert ist.

Spezialfall4: Wenn in der editMask das Format A als Zeichenfolge vorkommt, so muss für jedes A ein Buchstabe oder Blank eingegeben werden, ansonsten nimmt der FString keine weiter Eingabe mehr an.

Beispiele

Eingangsstring editMask constantText Ergebnisstring
"abc123XQW5%&#$!_*~" "" "abc123XQW5%&#$!_*~"
"1078" "K0000" "S0000" "S1078"
"C-12ab" "AK00000" ".=" "C=00000"
"b12ab" "AK00000" ".=" "B=00012"
"123" "00000" "00000" "00123"
"12345" "NNKNNKNN" "00-00-00" "12-34-50"
"1234567" "XXXXKXXKXXKXXX" ".... .. .. ..." "1234 56 7 "
"B12" "AK0000" ".-" "B-0012"
"12co" "0000LAA" "0000-AA" "0012CO"
"12co" "0000KAA" "0000-AA" "0012-CO"
"B12" "AK####" ".-" "B-  12"
"123456" "000K00K00" "...-..-.." "123-45-06"
"1234560" 000K00K00" "...-..-.." "123-45-60"
"HALLO23" "AAAAAAA" "......." "HALLO"
"Y23" "XXK000" "EB-123" "Y2-003"
"Y23" "AAK000" "EB-123" "YB-"
"CD23" "AAK000" "EB-123" "CD-023"

Bei der Verwendung des FormattedString-Widgets ist der String oben in der Spalte Ergebnisstring das, was bei der Eingabe im Eingabefeld erscheint und das Ergebnis des Aufrufes von GetValue für das Widget.
Die editMask und der constantText können für das FString-Widget mit dem Befehl SetFormat gesetzt werden. Dabei ist zu beachten, dass das Widget vor der Änderung des Formates geleert werden muss.

InstantView