Allgemeine Syntaxbeschreibung der Konfigurationsdateien und der Zeichenkettendatei   [2/3]
18xx/PC V2.22g - Dirk Clemens - 2004-05-07

  Seite 1    Seite 2    Seite 3 


page up top page
previous page top next page top
previous page bottom next page bottom
down bottom
 Homepage 
 Start 
 Neuigkeiten 
 Download 
 Hauptseiten 
 Überblick 
 18xx Spiele 
 kleine 1x8 
 18xx/PC 
 Geschichte 
 Links 
 Index 
 Programme 
 Überblick 
 18xx.exe 
 18config.exe 
 18export.exe 
 18string.exe 
 18check.exe 
 18list.exe 
 Varianten 
 18xx 
 1825 
 1826 
 1828 
 1829 
 1830 
 1835 
 1837 
 1839 
 1841 
 1842 
 1844 
 1847 
 1849 
 1851 
 1853 
 1856 
 1862 
 1869 
 1870 
 1895 
 1898 
 2038 

Inhaltsverzeichnis


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.   Funktionen

Funktionen beginnen alle mit einem Namen gefolgt von einer '(' und haben das Format 'Funktionsname(Parameter1,Parameter2,...)'. Funktionsnamen bestehen nur aus Buchstaben und Ziffern, wobei die Großschreibung keine Rolle spielt. Die Parameterliste ist abhängig von der Funktion.

Erwarten Funktionen einen bestimmten Parametertyp, dann werden die Parameter automatisch in den passenden Typ gewandelt.



page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.1   Alphabetische Übersicht

Die Funktionen sind in mehrere funktionale Gruppen eingeteilt worden. Daher zuerst eine alphabetische Liste aller Funktionen.
getError(), setError(), defined(), def(), symbol(), sym(), firstdef(), lastdef(), var(), isempty(), select(), trunc32(), int64hl(), int(), float(), num(), string(), list(), roman(), cos(), asin()
atan() sinh(), tanh(), sign(), log(), mean(), gmean(), hmean(), max(), countnum(), countval(), clearbit(), lowest0bit(), highest0bit(), count0bits(), date(), printtime(), monthname(), extract(), mid(), insert(), append(), item(), itemRE(), count(), countRE(), breakintolines(), ord(), lower(), capitals(), findRE(), encode64(), decode64(), l$replace(), l$sortlex(), l$cat(), l$list(), l$pack(), l$purge(), l$setlength(), l$setsize(), list2(), flatlist(), flatlistnum(), catlist(), m$cat(), m$clear(), m$exist(), m$insert(), m$insertmap(), m$keys(), m$keys(), m$keys(), m$keys(), m$length(), m$map(), m$oncemap(), m$remove(), m$removemap(), m$replace(), colorscheme(), green(), printfilename(), fileattrib(), filetype(), filesize(), filetime(), copyFile(), moveFile(), linkFile(), deleteFiles(), extern(), exist(), info(), check(), calc(), uniqueid(), key(), move(), index(), testdef(), test(), cmplex(), cmp(), pi(), e(), none(), inclAccessMode(), fileAccessMode(), deleteFile(), linkFiles(), moveFiles(), copyFiles(), findFiles(), findFile(), fileinfo(), relative(), minimize(), filename(), mixcolor(), blue(), color(), catmap(), m$storemap(), m$store(), m$size(), m$replacemap(), m$purge(), m$pack(), m$maskmap(), m$keys(), l$sort(), l$size(), l$length(), l$remove(), l$insert(), l$append(), l$clear(), encode64(), decode64(), checkkeyword(), match(), findrevers(), find(), print(), chgcase(), char(), expand(), left(), len(), length(), message(), dayname(), language(), count1bits(), highest1bit(), lowest1bit(), invertbit(), prod(), maxlength(), testbit(), setbit(), selecttime(), right(), replace(), subst(), substchar(), word(), seperator(), sort(), sortlex(), upper(), sortstring(), scan(), scansize(), split(), splitRE(), vector(), red(), rgb(), trim(), translate(), substRE(), remove(), size(), scantime(), splittime(), time(), sum(), min(), over(), polynom(), floor(), ceil(), log10(), log2(), pow(), round(), rnd(), range(), sqrt(), exp(), abs(), cosh(), acos(), tan(), sin(), scanroman(), bitmap(), map(), bool(), int64(), int32(), last(), first(), parm(), ismap(), islist(), isstring(), isfloat(), isint64(), isint32(), isint(), isnum(), clear(), type(), varname()



page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.2   Fehlerkontrolle

6.2.1   getError()

  Syntax:   'getError()'

  --- ??? ---  


6.2.2   setError()

  Syntax:   'setError ( error_mask )'

  --- ??? ---  


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.3   Variablen Kontrolle

6.3.1   defined(), def()

  Syntax:   'defined ( V1, V2, ..., Vn )'
'def ( V1, V2, ..., Vn )'

'def()' ist eine Kurzform für 'defined()'.

Als Parameter wird eine Liste von 1 bis N Variablenausdrücken erwartet. Jeder Variablenausdruck liefert den Wert '1' für WAHR oder den Wert '0' für FALSCH. Als Ergebnis der Funktion wird die Summe der einzelnen Variablenausdrücke geliefert. Somit ist '(#def(A)+#def(B)+#def(C))' das gleiche wie '#defined(A,B,C)'.

Wird genau ein Variable angegeben, dann ist das Ergebnis '0', falls die Variable nicht definiert ist, oder '1', falls sie definiert ist.


6.3.2   symbol(), sym()

  Syntax:   'symbol ( name )'
'symbol ( name, default )'
'symbol ( name, default, min )'
'symbol ( name, default, min, max )'
'sym ( ... )'

'sym()' ist eine Kurzform für 'symbol()'.

Falls die Variable mit dem angegebenen NAMEN definiert ist, dann wird der Wert der Variablen als Ergebnis geliefert. Falls MIN oder MAX angegeben, dann wird dieser Wert gemäß 'range()' angepaßt.

NAME kann auch eine Zeichenkette oder ein in Klammern '()' gesetzter Ausdruck sein, mit dem der Variablenname berechnet wird.

Ist die Variable nicht definiert, dann wird der Ersatzwert DEFAULT unabhängig von MIN oder MAX als Ergebnis geliefert. Wurde DEFAULT nicht angegeben, dann wird der Wert NONE als Ergebnis geliefert.


6.3.3   firstdef(), lastdef()

  Syntax:   'firstdef ( V1, V2, ..., Vn )'
'lastdef ( V1, V2, ..., Vn )'

Als Parameter wird eine Liste von 1 bis N Variablenausdrücken erwartet. Jeder Variablenausdruck liefert den Wert '1' für WAHR oder den Wert '0' für FALSCH. Als Ergebnis wird der Index des ersten ('firstdef') oder letzten ( 'lastdef') Variablenausdruckes geliefert, der WAHR ist. Sind alle Variablenausdrücke falsch, dann wird '0' als Ergebnis geliefert. (siehe auch 'first()' und 'last()')


6.3.4   var(), varname()

  Syntax:   'var ( P1, P2, ..., PN )'
'varname ( P1, P2, ..., PN )'

Als Parameter wird eine Liste von 1 bis N beliebigen Ausdrücken erwartet. Jeder Parameter wird in eine Zeichenkette gewandelt und zu einem Variablennamen zusammengefaßt, wobei jeweils in Punkt '.' zwischen den Bestandteilen hinzugefügt wird.

So ergibt z.B. 'varname("parm",5+2,"a")' den Variablenname 'PARM.7.a'. Hierdurch sind auch indizierte Variablen möglich.

Die Verwendung von Sonderzeiichen ist ebendfalls möglich. So kann man z.B. auf die Variable 'varname("Name + Sonderzeichen")' zugreifen.

'var()' liefert als Ergebnis den Wert der spezifizierten Variable, wobei diese Variable definiert sein muß. 'varname()' liefert als Ergebnis den Variablennamen als Zeichenkette, wobei diese Zeichenkette -- wie jede andere Zeichenkette auch -- bei einer Zuweisung auf der linken Seite verwendet werden kann.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.4   Typ Kontrolle

6.4.1   type()

  Syntax:   'type ( x )'

'X' ist ein beliebiger Ausdruck. 'type()' liefert als Ergebnis den Typ des Ausdruckes als eine der folgenden Konstanten: oder '_NONE'_INT32 '_INT64'_FLOAT '_STRING'_LIST '_MAP' (siehe auch Typen und Wertebereiche)


6.4.2   clear()

  Syntax:   'clear ( x )'

Das Ergebnis hat den gleichen Typ wie X, jedoch wird de Inhalt gelöscht:

  • NONE (undefiniert)
    Alle Fehlerbits werden gelöscht.

  • INT32 (Ganzzahl/32 Bit)
    Es wird der Wert 0 geliefert.

  • INT64 (Ganzzahl/64 Bit)
    Es wird der Wert 0q geliefert.

  • FLOAT (Fließkommazahl)
    Es wird der Wert 0.0 geliefert.

  • STRING (Zeichenkette)
    Es wird eine leere Zeichenkette geliefert.

  • LIST (Liste/Array)
    Es wird eine leere Liste (Null Elemente) geliefert.

  • MAP (Map/Baum)
    Es wird eine leere Map (Null Elemente) geliefert.


6.4.3   isempty()

  Syntax:   'isempty ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als NONE ist. '+1', wenn die Variable existiert und vom Typ NONE ist.


6.4.4   isnum()

  Syntax:   'isnum ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als INT32, INT64 oder FLOAT ist. '+1', wenn die Variable existiert und vom Typ INT32, INT64 oder FLOAT mit dem Wert '0' ist. '+2', wenn die Variable existiert und vom Typ INT32, INT64 oder FLOAT mit einem Wert '<0' ist. '+3', wenn die Variable existiert und vom Typ INT32, INT64 oder FLOAT mit einem Wert '>0' ist.


6.4.5   isint()

  Syntax:   'isint ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert; '0', wenn die Variable existiert und von einem anderen Typ als INT32 oder INT64 ist. '+1', wenn die Variable existiert und vom Typ INT32 oder INT64 mit dem Wert '0' ist. '+2', wenn die Variable existiert und vom Typ INT32 oder INT64 mit einem Wert '<0' ist. '+3', wenn die Variable existiert und vom Typ INT32 oder INT64 mit einem Wert '>0' ist.


6.4.6   isint32()

  Syntax:   'isint32 ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als INT32 ist. '+1', wenn die Variable existiert und vom Typ INT32 mit dem Wert '0' ist. '+2', wenn die Variable existiert und vom Typ INT32 mit einem Wert '<0' ist. '+3', wenn die Variable existiert und vom Typ INT32 mit einem Wert '>0' ist.


6.4.7   isint64()

  Syntax:   'isint64 ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als INT64 ist. '+1', wenn die Variable existiert und vom Typ INT64 mit dem Wert '0' ist. '+2', wenn die Variable existiert und vom Typ INT64 mit einem Wert '<0' ist. '+3', wenn die Variable existiert und vom Typ INT64 mit einem Wert '>0' ist.


6.4.8   isfloat()

  Syntax:   'isfloat ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als FLOAT ist. '+1', wenn die Variable existiert und vom Typ FLOAT mit dem Wert '0.0' ist. '+2', wenn die Variable existiert und vom Typ FLOAT mit einem Wert '<0' ist. '+3', wenn die Variable existiert und vom Typ FLOAT mit einem Wert '>0' ist.


6.4.9   isstring()

  Syntax:   'isstring ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als STRING ist. '+1', wenn die Variable existiert und vom Typ STRING ist, aber ohne Zeichen. '+2', wenn die Variable existiert und vom Typ STRING mit mindestens einem Zeichen ist.


6.4.10   islist()

  Syntax:   'islist ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als LIST ist. '+1', wenn die Variable existiert und vom Typ LIST ist, aber ohne Element. '+2', wenn die Variable existiert und vom Typ LIST mit mindestens einem Element ist.


6.4.11   ismap()

  Syntax:   'ismap ( varname )'

Als Ergebnis wird eines der folgenden Werte geliefert: '-1', wenn die Variable nicht existiert oder der Index ungültig ist. '0', wenn die Variable existiert und von einem anderen Typ als MAP ist. '+1', wenn die Variable existiert und vom Typ MAP ist, aber ohne Element. '+2', wenn die Variable existiert und vom Typ MAP mit mindestens einem Element ist.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.5   Auswahlfunktionen

6.5.1   parm()

  Syntax:   'parm ( index )'

Es wird der Wert des Paramters mit dem angegebenen Index als Ergebnis geliefert. Parameter werden bei Macros verwendet und sind Variablen mit dem Namen '$<index>'. '$1' ist der erste Parameter, $2 der zweite usf.


6.5.2   first(), last()

  Syntax:   'first ( x1, x2, ..., xn )'
'last ( x1, x2, ..., xn )'

Aus einer Liste von 1 bis N Ausdrücken wird als Ergebnis das Ergebnis des ersten (first) oder letzten (last) Ausdruckes geliefert, welches WAHR ist. (siehe auch 'firstdef()' und 'lastdef()')


6.5.3   select()

  Syntax:   'select ( INDEX, x0, x1, ..., xn )'

Alle Ausdrücke X0 bis XN werden berechnet. 'select()' liefert als Ergebnis den Ausdruck 'X<index>'. Dabei wird bei einem INDEX < 0 der Wert 0 und bei einem INDEX > N der Wert N verwendet.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.6   Umwandlungsfunktionen

6.6.1   int32()

  Syntax:   'int32 ( x )'
'int32 ( x, base )'

'int32()' liefert das Ergebnis des Ausdruckes X als eine 32 Bit Ganzzahl.

X kann auch eine Zeichenkette sein, die dann als textuelle Ganzzahl interpretiert wird. Hierfür wird auch die Zahlenbasis 'BASE' benötigt. Bei Wandlungen von Fließkommazahlen zu Ganzzahlen wird immer in Richtung Null gerundent. LIST und MAP führen immer zum Wert '0'. Weitere Details werden unter Operanden und Ganzzahlen beschrieben.


6.6.2   trunc32()

  Syntax:   'trunc32 ( x )'
'trunc32 ( x, base )'

'trunc32()' liefert das Ergebnis des Ausdruckes X als eine 32 Bit Ganzzahl.

Falls X eine 64-Bit Ganzzahl ist, dann werden einfach die oberen 32 Bits abgeschnitten. LIST und MAP führen immer zum Wert '0'.


6.6.3   int64()

  Syntax:   'int64 ( x )'
'int64 ( x, base )'

'int64()' liefert das Ergebnis des Ausdruckes X als eine 64 Bit Ganzzahl.

X kann auch eine Zeichenkette sein, die dann als textuelle Ganzzahl interpretiert wird. Hierfür wird auch die Zahlenbasis 'BASE' benötigt. Bei Wandlungen von Fließkommazahlen zu Ganzzahlen wird immer in Richtung Null gerundent. LIST und MAP führen immer zum Wert '0q'. Weitere Details werden unter Operanden und Ganzzahlen beschrieben.


6.6.4   int64hl()

  Syntax:   'int64hl ( high32, low32 )'

'int64hl()' erzeugt aus den beiden 32-Bit Ganzzahlen eine 64-Bit Ganzzahl. Dabei werden einfach die 32 Bits der beiden Parameter an die Bits 0..31 (LOW32) und 32..63 (HIGH32) kopiert.


6.6.5   int()

  Syntax:   'int ( x )'
'int ( x, base )'

'int()' liefert das Ergebnis des Ausdruckes X als eine Ganzzahl (32 oder 64 Bit).

Ist X eine Zeichenkette, dann wird die Zeichenkette wie bei 'num()' beschrieben in eine Zahl gewandelt. Ist (nun) X eine Fließkommazahl, dann wird die Zahl zuerst eine eine 64 Bitzahl und danach in eine 32 Bitzahl gewandelt, letzteres nur falls es der Wert zuläßt. Bei Wandlungen von Fließkommazahlen zu Ganzzahlen wird immer in Richtung Null gerundent. LIST und MAP führen immer zum Wert '0'. Weitere Details werden unter Operanden und Ganzzahlen beschrieben.


6.6.6   float()

  Syntax:   'float ( x )'

'float()' liefert das Ergebnis des Ausdruckes X als eine Fließkommazahl. X kann auch eine Zeichenkette sein, die dann als textuelle Fließkommazahl interpretiert wird. LIST und MAP führen immer zum Wert '0.0'.


6.6.7   num()

  Syntax:   'num ( x )'
'num ( x, base )'

'num()' liefert das Ergebnis des Ausdruckes X als einen numerischen Wert, d.h. als Ganzzahl oder als Fließkommazahl. Zeichenketten werden, wie unter Operanden, Zahlen, Zeichenketten beschrieben, in eine Zahl gewandelt. Für Wandlungen von STRING nach INT kann eine Basis vorgegeben werden. LIST und MAP führen immer zum Wert '0'.


6.6.8   bool()

  Syntax:   'bool ( x )'

Der Wert X wird in einen der beiden Wahrheitswerte '0' für FALSCH oder '1' für WAHR gewandelt. Ist X ein numerischer Wert ungleich NULL oder eine Zeichenkette mit mindestens einem Zeichen oder eine LIST oder MAP mit mindestens einem Element, dann ist das Ergebnis WAHR, in allen anderen Fällen ist das Funktionsergebnis FALSCH. (siehe auch Abschnitt FALSCH oder WAHR)


6.6.9   string()

  Syntax:   'string ( x )'
'string ( x, format )'
'string ( x, int_format, float_format )'

Aus dem Wert X wird eine Zeichenkette erzeugt. In Abhängigkeit des Typ des Wertes wird eine der vier folgenden Umwandlungen vorgenommen:

  • NONE (undefiniert)
    Es wird eine leere Zeichenkette (ohne Zeichen) erzeugt.

  • INT32 (Ganzzahl/32 Bit)
    Es wird eine Zeichenkette mit Hilfe der Funktion 'print()' erzeugt, wobei als Format FORMAT bzw. INT_FORMAT oder ersatzweise '%i' verwendet wird.

  • INT64 (Ganzzahl/64 Bit)
    Es wird eine Zeichenkette mit Hilfe der Funktion 'print()' erzeugt, wobei als Format FORMAT bzw. INT_FORMAT oder ersatzweise '%i' verwendet wird.

  • FLOAT (Fließkommazahl)
    Es wird eine Zeichenkette mit Hilfe der Funktion 'print()' erzeugt, wobei als Format FORMAT bzw. FLOAT_FORMAT oder ersatzweise '%g' verwendet wird.

  • STRING (Zeichenkette)
    X wird unverändert als Ergebnis geliefert.

  • LIST (Liste/Array)
    Es wird eine Zeichenkette der Form '@LIST[...]' erzeugt. Die einzelnen Werte der Liste werden in lesbarer Form ausgegeben, wobei Zeichenketten auf 35 Zeichen gekürzt werden und Fließkommazahlen nur mit 5 Stellen Genauigkeit ausgegeben werden.

  • STRING (Zeichenkette)
    Es wird eine Zeichenkette der Form '@MAP[...]' erzeugt. Die einzelnen Werte der Liste werden in lesbarer Form ausgegeben, wobei Zeichenketten auf 35 Zeichen gekürzt werden und Fließkommazahlen nur mit 5 Stellen Genauigkeit ausgegeben werden.


6.6.10   list()

  Syntax:   'list ( P0, ..., PN )'

Als Ergebnis wird eine Liste mit N+1 Elementen geliefert. Die einzelnen Elemente sind Kopien der Parameter P0 bis PN.


6.6.11   map()

  Syntax:   'map ( ????? )'

  --- ??? ---  


6.6.12   bitmap()

  Syntax:   'bitmap ( x )'

'bitmap()' liefert das Ergebnis des Ausdruckes X als eine Zeichenkette in Bitmapdarstellung '< ... >'. In Abhängigkeit des Types eines Wertes erfolgt die folgende Wandlung:

  • NONE (undefiniert)
    Es wird eine Zeichenkette in der Form '<>' als Ergebnis geliefert.

  • INT32 (Ganzzahl/32 Bit)
    Die Zahl wird in der Bitmapdarstellung '< ... >' gewandelt. Innerhalb der spitzen Klammern wird eine durch Kommata getrennte Liste erzeugt. Für jedes gesetzte Bit wird ein Eintrag mit der Nummer in die Liste vorgenommen. Sollten drei oder mehr Bits hintereinander gesetzt sein, so wird ein Eintrag der Form 'a:b' erzeugt, wobei 'a' der Bitmummer des niedrigstwertigsten Bits und b der Bitnummer des höchstwerigen gesetzen Bits entspricht.

    Beispiel: Die Zahl 39 == 32 + 4 + 2 + 1 wird in die Zeichenkette '0:2,5' gewandelt.

  • INT64 (Ganzzahl/64 Bit)
    Die Zahl wird in der Bitmap-Darstellung '< ... >q' gewandelt. Die Umwandlung der 64 Bits erfolgt genauso wie bei den 32-Bit Zahlen.

  • FLOAT (Fließkommazahl)
    Die Zahl wird in der Bitmapdarstellung '< ... >q' gewandelt. Bei der Umwandlung wird der Wert (die unveränderte Bitdarstellung) als 64-Bit Ganzzahl betrachtet und entsprechen gewandelt.

  • STRING (Zeichenkette)

      --- ??? ---  

  • LIST (Liste/Array)

      --- ??? ---  

  • MAP (Map/Baum)

      --- ??? ---  


6.6.13   roman()

  Syntax:   'roman ( num )'
'roman ( num, flags )'

'roman()' erzeugt aus einer Zahl eine Zeichenkette Dazu wird zuerst der Parameter NUM mittels'int32()' in eine 32-Bit Ganzzahl gewandelt.

Zahlen > 4000000 werden in der Form 'r2.r1.r0' und Zahlen > 4000 in der Form 'r1.r0' dargestellt. Dabei ist jede Teildarstellung r1, r2 und r3 eine römische Zahl.

Es können wahlweise Flags angegeben werden. Ohne Angabe von Flags wird '_ROMAN_SHORT' verwendet:

  • _ROMAN_LOWER   (0)
    Die römische Zahl wird in Kleinbuchstaben dargestellt. Dieses geschieht ohne Angabe von _ROMAN_UPPER automatisch.

  • _ROMAN_UPPER   (1)
    Die römische Zahl wird in Großbuchstaben dargestellt. Diese Option hat Vorrang vor _ROMAN_LOWER..

  • _ROMAN_ZERO   (2)
    Normalerweise wird die Zahl Null ohne Zeichen dargestellt. Mit diesem Flag wird sie aber mit der Ziffer '0' dargestellt.

  • _ROMAN_SHORT   (4)
    Durch dieses Flag werden zusätzliche Abkürzungen zugelassen.

    Beispiel: Die Zahl 99 wird normalerweise als 'XCIX' dargestellt. Mit _ROMAN_SHORT wird die Darstellung auf 'IC' gekürzt.

  • _ROMAN_SIGNED   (8)
    Normalerweise wird die Zahl als vorzeichenlos Interpretiert. Durch das Flags _ROMAN_SIGNED werden auch negative Zahlen durch ein führendes Minuszeichen dargestellt.


6.6.14   scanroman()

  Syntax:   'scanroman ( text )'
'scanroman ( text, bool_mega_point )'

'TEXT' wird als eine römische Zahl interpretiert und in eine 32-Bit Ganzzahl gewandelt. Ist der optionale zweite Parameter BOOL_MEGA_POINT == WAHR, dann werden Punkte als Tausender-Trennzeichen akzeptiert.

Die Zeichen der Zeichenkette 'TEXT', die nicht für die Umwandlung verwendet wurden, werden in der Variable '$RESULT2' abgespeichert.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.7   Trigonometrische Funktionen

6.7.1   sin(), cos(), tan()

  Syntax:   'sin ( x )'
'cos ( x )'
'tan ( x )'

Es wird der Sinus, Cosinus oder Tangens von X in Radiant berechnet.

Ist X eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


6.7.2   asin(), acos(), atan()

  Syntax:   'asin ( x )'
'acos ( x )'
'atan ( x )'

Diese drei Funktionen sind die Umkehrfunktionen von 'sin()', 'cos()' und 'tan()'. Bei 'asin()' und 'acos()' sind als Argument nur Werte aus dem Intervall [ -1, +1 ] erlaubt.

Ist X eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


6.7.3   sinh(), cosh(), tanh()

  Syntax:   'sinh ( x )'
'cosh ( x )'
'tanh ( x )'

Es wird der Hyperbelsinus, Hyperbelcosinus oder Hyperbeltangens von X berechnet. Die drei Funktionen sind wie folgt definiert:

sinh(x) := ( ex - e-x ) / 2
cosh(x) := ( ex + e-x ) / 2
tanh(x) := sinh(x)/cosh(x) == ( ex - e-x ) / ( ex + e-x )

Ist X eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.8   weitere numerische Funktionen

6.8.1   abs()

  Syntax:   'abs ( num )'

Es wird der Absolutwert von NUM berechnet. Sollte NUM weder INT noch FLOAT sein, dann wird NONE als Ergebnis geliefert.

Ist jedoch NUM eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


6.8.2   sign()

  Syntax:   'sign ( num )'
'sign ( num, epsilon )'

Es wird das Vorzeichen des numerischen Ausdruckes berechnet:   '-1', falls x < 0;   '+1', falls x > 0;   '0' sonst.

Falls NUM eine Fliekommazahl ist und EPSILON angegeben wurde, dann ist das Ergebnis wie folgt: '-1', falls x < -abs(EPSILON);   '+1', falls x > +abs(EPSILON);   '0' sonst.

Ist NUM eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.

Ist NUM keine Nummmer, dann wird immer 0 als Ergebnis geliefert.


6.8.3   exp()

  Syntax:   'exp ( x )'

Es wird die Potenz 'ex' berechnet.

Ist NUM eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


6.8.4   pow()

  Syntax:   'pow ( x, y )'

Es wird die Potenz 'xy' berechnet.


6.8.5   log(), log2(), log10()

  Syntax:   'log ( x )'
'log ( x, basis )'
'log2 ( x )'
'log10 ( x )'

Diese Funktionen berechnen den Logarithmus des Wertes X. Während bei 'log2()' und 'log10()' die BASIS auf 2 bzw. 10 festgelegt ist, kann sie bei 'log()' angegeben werden. Fehlt die Angabe dieser BASIS, so wird die Konstante 'e' verwendet um den natürlichen Logarithmus zu berechnen.

Ist x eine LISTE oder MAP, dann wird der Logarithmus für jedes Element, auch rekursiv, berechnet und als Ergebnis wird eine LISTE oder MAP geliefert.


6.8.6   sqrt()

  Syntax:   'sqrt ( x )'

Es wird die Quadratwurzel von X berechnet.

Ist X von Typ INT, dann wird die größte Ganzzahl berechnet, deren Quadrat <= X ist.

Ist X eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


6.8.7   range()

  Syntax:   'range ( num, min, max )'

NUM, MIN und MAX sind numerische Ausdrücke. Als Ergebnis wird MIN geliefert, wenn NUM < MIN. Es wird MAX geliefert, wenn WERT > MAX. Andernfalls wird WERT geliefert.

Es wird also darauf geachtet, dass das Ergebnis zwischen MIN und MAX liegt. Falls MIN > MAX, dann wird MAX als Ergebnis geliefert. 'range(A,B,C)' ist daher eine Kurzform von 'min(max(A,B),C)'.


6.8.8   rnd()

  Syntax:   'rnd ( )'
'rnd ( von )'
'rnd ( von, bis )'

Ohne Parameter wird eine Zufallszahl aus dem gesamten Wertebereich der Ganzzahlen geliefert.

Mit einem Parameter wird eine Zufallszahl aus dem Intervall [ 0 ... BIS [ geliefert, wobei 'rnd(0)' gleichwertig mit 'rnd()' ist.

Bei zwei Parametern wird eine Zufallszahl aus dem Intervall [ VON ... BIS [ geliefert, wobei 'rnd(0,BIS)' gleichwertig ist mit 'rnd(BIS)'.


6.8.9   round(), ceil(), floor()

  Syntax:   'round ( x )'
'ceil ( x )'
'floor ( x )'

Die Zahl X wird auf die nächste ganze Zahl mathematisch gerundet (round) bzw. aufgerundet (ceil) bzw. abgerundet (floor). Als Ergebnis wird immer eine Fließkommazahl geliefert.

Ist x eine LISTE oder MAP, dann erfolgt die Berechnung für jedes einzelene Element, auch rekursiv, und als Ergebnis wird eine LISTE oder MAP geliefert.


6.8.10   polynom()

  Syntax:   'polynom ( X, An, ..., A2, A1, A0 )'

Es wird das Polynom 'An*Xn + ... + A2*X2 + A1*X + A0' berechnet.


6.8.11   over()

  Syntax:   'over ( n, k )'

Es wird 'N über K' berechnet. Dieses entspricht der Formel 'N! / ( K! * (N-K)! )'. Dazu muß gelten: 0 <= K <= N <= 65535. Es wird versucht, eine Ganzzahl als Ergebnis zu liefern. Dieses ist bei N < 20 immer der Fall.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.9   statistische Funktionen

6.9.1   mean(), gmean(), hmean()

  Syntax:   'mean ( x1, x2, ..., xn )'
'gmean ( x1, x2, ..., xn )'
'hmean ( x1, x2, ..., xn )'

Aus einer Liste von 1 bis N numerischen Ausdrücken wird das arithmetische (mean), gemoetrische (gmean) oder harmonische (hmean) Mittel berechnet. Dabei werdenbei LIST und MAP Objekten, die einzelnen Unterlemente, auch rekursiv, ausgewertet. STRING und NONE Parameter werden ignoriert.

Das Ergebnis ist vom Typ FLOAT, wenn mindestens eine numerischer Wert existiert. Anderenfalls wird NONE als Ergebnis geliefert.

Anmerkungen zur Berechnung:

  • Das arithmetische Mittel wird aus 'Summe(x)/N' berechnet.
  • Das geomerische Mittel wird aus 'N_TE_WURZEL(Produkt(x))' berechnet. Um jedoch Überläufe zu vermeiden, wird tatsächlich 'EXP(Summe(LOG(ELEMENTE))/N)' berechnet.
  • Für das Harmonische Mittel wird 'N/Summe(1/x)' berechnet.


6.9.2   min(), max()

  Syntax:   'min ( x1, x2, ..., xn )'
'max ( x1, x2, ..., xn )'

Aus einer Liste von 1 bis N Ausdrücken wird der kleinste bzw. größte Wert als Ergebnis geliefert. Dabei sollte entweder alle Parameter Zeichenketten oder alle Parameter numerische Werte sein.


6.9.3   maxlength()

  Syntax:   'maxlength ( ????? )'

  --- ??? ---  


6.9.4   sum()

  Syntax:   'sum ( num, ... )'

Zuerst werden die Parameter analysiert:

  • Wird exakt ein Parameter übergeben, der weder LIST noch MAP ist, dann wird die Formel ' NUM * ( abs(NUM)+1 ) /2 ' berechnet, wobei NUM als INT und als FLOAT vorliegen darf. Für ganze Zahlen entspricht dieses der Summe aller ganzen Zahlen zwischen 0 und NUM, wobei abs(NUM) < 46341 sein muß.
  • In allen anderen Fällen wird die Summe aller numerischen Parameter berechnet, wobei bei LIST und MAP alle Elemente (auch rekursiv) abgearbeitet werden.


6.9.5   prod()

  Syntax:   'prod ( num, ... )'

Zuerst werden die Parameter analysiert:

  • Wird exakt ein Parameter übergeben, der weder LIST noch MAP ist, dann wird die Fakultät NUM! (das Produkt aller ganzen Zahlen zwischen 1 und n) berechnet. Bei N < 0 ist das Ergebnis vom Typ NONE. Bei 0 <= N <= 12 ist das Ergebnis eine Ganzzahl. Bei N > 12 ist das Ergebnis eine Fließkommazahl.
  • In allen anderen Fällen wird das Produkt aller numerischen Parameter berechnet, wobei bei LIST und MAP alle Elemente (auch rekursiv) abgearbeitet werden.


6.9.6   countnum()

  Syntax:   'countnum ( ????? )'

  --- ??? ---  


6.9.7   countval()

  Syntax:   'countval ( ????? )'

  --- ??? ---  


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.10   Bitmanipulation

Die folgenden Funktionen erlauben Bitmanipulationen auf Ganzzahlen (32 und 64 Bit), auf Fließkommazahlenn und auch auf Zeichenketten. Alle Funktionen sind gegenüber den Parametern robust, so dass jegliche Werte erlaubt sind.

Bei den Zahlen wird einfach das entsprechende Bit gesetzt, gelöscht oder abgefragt. Nicht vorhandene Bits werden als nicht gesetzt (Wert 0) interpretiert und können nicht verändert werden.

Mit Zeichenketten lassen sich beliebig große Bitmaps erzeugen. Bei Abfragen werden nicht vorhandene Bits als nicht gesetzt (Wert 0) interpretiert. Beim Setzen von Bits wird die Zeichenkette mit entsprechend vielen 0-Zeichen (ASCII Wert 0) erweitert und das angegebene Bit gesetzt. Dabei gilt: Das 0. Zeichen enthält die Bits 0..7, das 1. Zeichen die Bits 8..15 usw.



6.10.1   testbit()

  Syntax:   'testbit ( number, bitnum )'
'testbit ( string, bitnum )'

Siehe auch: Bitmanipulation

Es wird das Bit an der Position 'BITNUM' der Nummer oder Zeichenkette abgefragt. Als Ergebnis wird '0' geliefert, wenn dieses Bit nicht existiert oder wenn es nicht gesetzt ist. Andernfalls -- es existiert und ist gesetzt -- wird der Wert '1' geliefert.


6.10.2   clearbit()

  Syntax:   'clearbit ( number, bitnum )'
'clearbit ( string, bitnum )'

Siehe auch: Bitmanipulation

Das Bit 'BITNUM' der Nummer oder Zeichenkette wird gelöscht, sofern ein solches Bit existiert. Als Ergebnis wird die modifizierte Nummer bzw. Zeichenkette geliefert.


6.10.3   setbit()

  Syntax:   'setbit ( number, bitnum )'
'setbit ( string, bitnum )'

Siehe auch: Bitmanipulation

Das Bit 'BITNUM' der Nummer oder Zeichenkette wird gesetzt. Eine Zahl (INT32, INT64 oder FLOAT) bleibt jedoch unverändert, wenn ein Bit mit der geforderten Bitnummer nicht existiert.

Eine Zeichenkette wird ggf. mit entsprechend vielen 0-Zeichen (nicht die Ziffer '0', sondern das Zeichen mit ASCII-Wert 0) aufgefüllt um anschließend das Bit zu setzen.

Als Ergebnis wird die modifizierte Nummer bzw. Zeichenkette geliefert.


6.10.4   invertbit()

  Syntax:   'invertbit ( number, bitnum )'
'invertbit ( string, bitnum )'

Siehe auch: Bitmanipulation

Das Bit 'BITNUM' der Nummer oder Zeichenkette wird invertiert. Eine Zahl (INT32, INT64 oder FLOAT) bleibt jedoch unverändert, wenn ein Bit mit der geforderten Bitnummer nicht existiert.

Eine Zeichenkette wird ggf. mit entsprechend vielen 0-Zeichen (nicht die Ziffer '0', sondern das Zeichen mit ASCII-Wert 0) aufgefüllt um anschließend das Bit zu invertieren.

Als Ergebnis wird die modifizierte Nummer bzw. Zeichenkette geliefert.


6.10.5   lowest0bit()

  Syntax:   'lowest0bit ( number )'
'lowest0bit ( string )'

Siehe auch: Bitmanipulation

Innerhalb der angegebenen Zahl oder Zeichenkette wird das niederwertigste Bit gesucht, welches nicht gesetzt ist -- also den Wert '0' hat. Existiert ein solches Bit, dann wird die Bitnummer als Ergebnis geliefert, sonst der Wert '-1'.


6.10.6   lowest1bit()

  Syntax:   'lowest1bit ( number )'
'lowest1bit ( string )'

Siehe auch: Bitmanipulation

Innerhalb der angegebenen Zahl oder Zeichenkette wird das niederwertigste Bit gesucht, welches gesetzt ist -- also den Wert '1' hat. Existiert ein solches Bit, dann wird die Bitnummer als Ergebnis geliefert, sonst der Wert '-1'.


6.10.7   highest0bit()

  Syntax:   'highest0bit ( number )'
'highest0bit ( string )'

Siehe auch: Bitmanipulation

Innerhalb der angegebenen Zahl oder Zeichenkette wird das höchstwertige Bit gesucht, welches nicht gesetzt ist -- also den Wert '0' hat. Existiert ein solches Bit, dann wird die Bitnummer als Ergebnis geliefert, sonst der Wert '-1'.


6.10.8   highest1bit()

  Syntax:   'highest1bit ( number )'
'highest1bit ( string )'

Siehe auch: Bitmanipulation

Innerhalb der angegebenen Zahl oder Zeichenkette wird das höchstwertige Bit gesucht, welches gesetzt ist -- also den Wert '1' hat. Existiert ein solches Bit, dann wird die Bitnummer als Ergebnis geliefert, sonst der Wert '-1'.


6.10.9   count0bits()

  Syntax:   'count0bits ( number )'
'count0bits ( string )'

Siehe auch: Bitmanipulation

Als Ergebnis wird die Anzahl der 0-Bits innerhalb der angegebenen Zahl oder Zeichenkette geliefert.


6.10.10   count1bits()

  Syntax:   'count1bits ( number )'
'count1bits ( string )'

Siehe auch: Bitmanipulation

Als Ergebnis wird die Anzahl der 1-Bits innerhalb der angegebenen Zahl oder Zeichenkette geliefert.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.11   Zeit

6.11.1   Zeitformate

Alle folgenden Zeitfunktionen 'time()', 'date()', 'printtime()', 'splittime()' und 'selecttime()' erwarten als Parameter 'TIME' eine Zeitangabe. Je nach Typ wird diese Zeitangabe wie folgt interpretiert:

  • NONE (undefiniert)
    Es wird die aktuelle Zeit verwendet.

  • INT32 (Ganzzahl/32 Bit)
    Diese Ganzzahl enthält die Anzahl der Tage, die seit dem 1. Januar 45 vor Christi Geburt vergangen sind. Als Tageszeit wird jeweils 0:00:00 Uhr angenommen.

  • INT64 (Ganzzahl/64 Bit)
    Diese Ganzzahl enthält die Anzahl der 100 Nanosekunden (oder 10-7 Sekunden), die seit dem 1. Januar 45 vor Christi Geburt vergangen sind.

  • FLOAT (Fließkommazahl)
    Diese Fließkommazahl enthält die Anzahl der Sekunden, die seit dem 1. Januar 45 vor Christi Geburt vergangen sind. Die Hinterkommastellen werden als Sekundenbruchteile interpretiert.

  • STRING (Zeichenkette)
    Die Zeichenkette wird interpretiert (siehe hierzu Abschnitt Datums- und Zeitangaben). Als Basis für relative Zeitangaben wird 'BASE' oder ersatzweise die aktuelle Zeit verwendet.


6.11.2   time()

  Syntax:   'time ( )'
'time ( time )'
'time ( time, base )'

Die Zeitangabe 'TIME' wird in eine 64 Bit Ganzzahl umgewandelt, die Anzahl der 100 Nanosekunden (oder 10-7 Sekunden) enthält, die seit dem 1. Januar 45 vor Christi Geburt vergangen sind.

Der erste Parameter ist eine Zeitangabe, wie sie unter Zeitformate beschrieben ist. Der Parameter 'Basis' wird nur benötigt, wenn 'TIME' eine Zeichenkette mit einer relativen Zeitangabe ist; ersatzweise wird die aktuelle Zeit verwendet. Ohne Parameter wird die aktuelle Zeit geliefert.


6.11.3   date()

  Syntax:   'date ( )'
'date ( time )'
'date ( time, base )'

Die Zeitangabe 'TIME' wird in eine 32 Bit Ganzzahl umgewandelt, die Anzahl der Tage enthält, die seit dem 1. Januar 45 vor Christi Geburt vergangen sind.

Der erste Parameter ist eine Zeitangabe, wie sie unter Zeitformate beschrieben ist. Der Parameter 'BASE' wird nur benötigt, wenn 'TIME' eine Zeichenkette mit einer relativen Zeitangabe ist; ersatzweise wird die aktuelle Zeit verwendet. Ohne Parameter wird die aktuelle Zeit geliefert.


6.11.4   printtime()

  Syntax:   'printtime ( time, Format )'
'printtime ( time, Format, escape_char )'

Die Zeitangabe 'TIME' wird in eine Zeichenkette gewandelt, wobei 'Format' die Umwandlung steuert. 'TIME' ist eine Zeitangabe, wie sie unter Zeitformate beschrieben ist.

Mit ESCAPE_CHAR wird das Zeichen angegeben, welches im Formatstring die Steuersequenzen einleitet. Ohne Angabe (oder falls 0) wird '%' verwendet.

Ist FORMAT eine Zahl, dann wird diese Zahl, dann wird die Umrechung 'int32(FORMAT) & 3' durchgeführt. Das Ergebnis ist eine der Zahlen von 0 bis 3. Für jede diese Zahlen gibt es eine vordefinierte Formatzeichenkette: '%x', '%D' ,'%T' und '%D %T'.

Nun ist FORMAT eine Steuerzeichenkette, die neben normalen Zeichen Steuersequenzen enthalten kann. Normale Zeichen werden direkt in die Zielzeichenkette kopiert. Steuersequenzen beginnen mit '%' und haben den folgenden Aufbau:

'%'[Flag][Feldweite]['.' Genauigkeit] Kontrollzeichen

Die Angaben in eckigen Klammern '[]' sind optional. Das '%' Zeichen leitet immer die Steuersequenz ein. Um ein einzelnes '%' auszugeben muß '%%' verwendet werden.

  • Flags
    Die folgenden Flags können verwendet werden:
    '-' Bei negativen Zahlen (Jahreszahl!) wird ein Minuszeichen ausgegeben.
    '+' Es wird immer ein Vorzeichen ausgegeben, '+' oder '-'
    '>' Das Vorzeichen wird nach der Zahl ausgegeben, z.B. '12-'

  • Feldweite
    Die Ganzzahl gibt die minimale Anzahl (in Dezimalschreibweise) der Zeichen an. Eine führende Null besagt, dass die Zeichenkette mit Nullen anstatt Leerzeichen aufgefüllt wird. Ohne Angabe der Feldweite wird die Standardfeldweite und das Standardfüllzeichen verwendet, die unten in der Tabelle beschrieben sind.

    Bei Zahlen handelt es sich um eine Mindestfeldweite und bei Texten um eine Maximalfeldweite.

  • Genauigkeit
    Die Genauigkeit wird nur für Sekundenangaben verwendet. Sie gibt die Anzahl der Hinterkommastellen (bis zu 7) an.

  • Kontrollzeichen
    Die folgende Tabelle gibt zu jedem Steuerzeichen die Standardfeldweite und eine Kurzbeschreibung an. Bei Standardfeldweiten, die mit einer Null beginnen, wird die Zahl mit führenden Nullen ausgegeben.
    Zeichen FW Beschreibung und Beispiel für das Datum '21.Jan.2001 16:25:34'
    'A'   Wochentag als Text (siehe Anmerkung unten). Beispiel: 'Sonntag'
    'B'   Monatsname als Text (siehe Anmerkung unten). Beispiel: 'Januar'
    'b'   'BC' oder 'AD', je nach Vorzeichen der Jahreszahl. Beispiel: 'AD'
    'D'   Abkürzung für '%d. %3B %-y'. Beispiel: '21. Jan 2001'
    'd' 2 Tag im Monat, 1..31. Beispiel: '21'
    'g'   'G' oder 'J' für gregorianische/julianische Zeit. Beispiel: 'G'
    'H' 2 Stunde des Tages, 0..23. Beispiel: '16'
    'h' 2 Stunde des Halbtages, 0..11. Beispiel: ' 4'
    'j' 3 Tag im Jahr, 1..366. Beispiel: ' 21'
    'L'   Abkürzung für '%-y-%m-%02d %02H:%M:%.#S'. (Die Genauigkeit wird für die Sekundenangabe übernommen) Beispiel: '2001-01-21 16:25:34'
    'l'   Abkürzung für '%-y-%m-%02d'. Beispiel: '2001-01-21'
    'M' 02 Minute der Stunde, 0..59. Beispiel: '25'
    'm' 02 Monat als Zahl, 1..12. Beispiel: '01'
    'N'   Abkürzung für '%-y%m%02d%02H%M%.#S'. (Die Genauigkeit wird für die Sekundenangabe übernommen) Beispiel: '20010121162534'
    'n'   Abkürzung für '%-y%m%02d'. Beispiel: '20010121'
    'p'   'AM' oder 'PM'. Beispiel: 'PM'
    'S' 02 Sekunde der Minute, 0..59. Die Genauigkeit legt die Anzahl der Nachkommastellen fest. Beispiel: '34'
    's' 5 Sekunde des Tages, 0..86399. Die Genauigkeit legt die Anzahl der Nachkommastellen fest. Beispiel: '59134'
    'T'   Abkürzung für '%H:%M:%.#S'. (Die Genauigkeit wird für die Sekundenangabe übernommen) Beispiel: '16:25:34'
    't' 6 Anzahl der Tage seit dem 1. 1. -45. Beispiel: '746944'
    'W' 2 Wochennummer, 0..53 (siehe Anmerkung unten). Beispiel: ' 3'
    'w' 1 Tag der Woche, 1..7, Mo-So (siehe Anmerkung unten). Beispiel: '7'
    'X'   Abkürzung für '%d-%3B-%-y %H:%M:%.7S, W=%2A/%02W, T=%t.%05s, %g'. Beispiel: '21-Jan-2001 16:25:34.0000000, W=So/03/2001, T=746944.59134, G-'
    'x'   Abkürzung für '%d-%3B-%-y %H:%M:%S'. Beispiel: '21-Jan-2001 16:25:34'
    'y' 04 Jahr, -045..9999..10000..58300. Beispiel: '2001'

Anmerkungen:

  • Die Texte für Wochentag und Monat werden durch die Funktionen 'dayname()' und 'monthname()' bestimmt.

  • Per ISO Norm beginnt eine Woche am Montag und endet am Sonntag. Die erste Woche des Jahres ist die Woche, in die der erste Donnerstag (der Tag in der Mitte der Woche) des Jahres fällt.


6.11.5   splittime()

  Syntax:   'splittime ( time )'
'splittime ( time, mode )'

Die Zeitangabe 'TIME' wird in eine Zeichenkette gewandelt, die eine durch Kommata unterteilte Liste mit den einzelnen Werten (Sekunde, Minute,...) enthält. 'TIME' ist eine Zeitangabe, wie sie unter Zeitformate beschrieben ist.

Die Liste enthält in dieser Reihenfolge: Nanosekunden/100, Sekunden, Minuten, Stunden, Tag im Monat, Monat, Jahr, Wochen im Jahr, Wochentag, Tag im Jahr, Tag Total, Sekunde im Tag, Flag für Gregorianische Umrechnung.

Mit der Funktion 'item()' und den Konstanten '_NSEC100', '_SEC', '_MIN', '_HOUR', '_DAY', '_MONTH', '_YEAR', '_WEEKOFYEAR', '_WEEK', '_WYEAR', '_WDAY', '_YDAY', '_TDAY', '_DSEC' und '_GREGORDAY' kann auf ein einzelnes Element der Liste zugegriffen werden. (siehe hierzu auch 'selecttime()')

Anmerkung: '_NSEC100' liefert das Vielfache von 100 Nanosekunden bzw. das Vielfache von 10-7 Sekunden.


6.11.6   selecttime()

  Syntax:   'selecttime ( time, index )'

Die Zeitangabe 'TIME' wird in einzelne Bestandteile aufgebrochen. Als Ergebnis wird dann der durch 'INDEX' festgelegt Teil geliefert. 'TIME' ist eine Zeitangabe, wie sie unter Zeitformate beschrieben ist.

Für 'INDEX' sollte eine der folgenden Konstanten verwendet werden:

 Konstante   Wert   Bedeutung 
 _NSEC100   0   10-7 Sekunden (100 nsec), 0..9999999 
 _SEC   1   Sekunde, 0..59 
 _MIN   2   Minute, 0..59 
 _HOUR   3   Stunde, 0..23 
 _DAY   4   Tag im Monat, 1..31 
 _MONTH   5   Monat, 1..12 
 _YEAR   6   Jahr, -45..58300 
 _WEEKOFYEAR   7   Woche im Jahr _YEAR, 0..53 
 _WYEAR   8   Jahreszahl für _WEEK 
 _WEEK   9   Wochennummer, 1..53 
 _WDAY   10   Wochentag, 1..7 (Mo-So) 
 _YDAY   11   Tag im Jahr, 1..366 
 _TDAY   12   Tag Total, 0.. 
 _DSEC   13   Sekunde im Tag, 0..86399 
 _ISGREGOR   15   Kalender: 0=julianisch, 1=gregorianisch 

Anmerkung zur Wochenberechnung:

  • Gemäß ISO-Norm beginnt die Woche immer an einem Montag und der erste Donnerstag des Jahres liegt in der ersten Woche. So war der 1.1.2000 ein Samstag in der 52. Woche des Jahres 1999. Dieses drücken die beiden Werte '_WEEK' und '_WYEAR' aus.

  • Aus der Sicht des Jahres 2000 liegt der 1.1.2000 in der 0. Woche. Dieses drücken die beiden Werte '_WEEKOFYEAR' und '_YEAR' aus.


6.11.7   scantime()

  Syntax:   'scantime ( text )'
'scantime ( text, base )'
'scantime ( text, base, varname )'

scantime() erwartet als ersten Parameter eine Zeichennkette und wandelt sie eine Zeit um. Details hierzu sind im Abschnitt Datums- und Zeitangaben beschrieben. Als Basis für relative Zeitangaben wird 'BASE' oder ersatzweise die aktuelle Zeit verwendet.

Bis hier hin funktioniert scantime() genauso wie die vorherigen Zeitfunktionen. Zusätzlich werden aber die Zeichen der Zeichenkette 'TEXT', die nicht für die Umwandlung verwendet wurden, werden in der Variable '$RESULT2' abgespeichert.


6.11.8   sec(), msec(), usec(), nsec()

  Syntax:   'sec(), msec(), usec(), nsec()()'

Dieses vier Funktionen liefern die relative Zeit zu einem nicht weiter definiertem Startpunkt in Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden. Damit lassen sich Zeitabstände relativ genau bestimmen.

Basis ist ein hochauflösender Zeitgeber, der immer während hochgezählt wird.

Unter Linux beträgt die Genauigkeit 1 Millisekunde (1.000.000 Hz), wobei die Zeit angegeben wird, die seit dem 1.1.1970 vergangen ist.

Unter DOS und Windows beträgt die Genauigkeit ca. 838.1 Nanosekunden (genau 1.193.180 Hz). Hierzu wird der Hardwaretimer des PC's genutzt, wobei die Zeit angegeben wird, die seit dem Hochfahren des Rechners vergangen ist.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.12   Sprache

6.12.1   language()

  Syntax:   'language()'

Diese Funktion liefert als Ergebnis eine 32 Bit Ganzzahl, die die im Programm eingestelle Sprache wiedergibt. Das Ergebnis entspricht einer der Konstanten '_NO_LANGUAGE', '_ENGLISH', '_GERMAN' oder '_UNKNOWN_LANGUAGE'.


6.12.2   dayname()

  Syntax:   'dayname ( index )'

'dayname()' liefert den Wochentag zu 'INDEX' als Text in der aktuellen Sprache (siehe 'language()'). Die Zahlen '0' und '7' werden als Sonntag interprtetiert und die Zahlen '1' bis '6' als Montag bis Samstag. Bei einem ungültigen 'INDEX' wird '???' als Ergebnis geliefert.


6.12.3   monthname()

  Syntax:   'monthname ( index )'

'monthame()' liefert den Monatsnamen zu 'INDEX' in der aktuellen Sprache (siehe 'language()'). Die Zahlen '1' bis '12' werden als Januar bis Dezember interpretiert. Bei einem ungültigen 'INDEX' wird '???' als Ergebnis geliefert.


6.12.4   message()

  Syntax:   'message ( msg_index )'

'message()' liefert die (Fehler-) Meldung zu 'abs(MSG_INDEX)' in der aktuellen Sprache (siehe 'language()'). Dazu sollte eine der Konstanten '_MSG_*' verwendet werden. Bei einem ungültigen 'MSG_INDEX' wird eine leere Zeichenkette als Ergebnis geliefert. Diese Fehlermeldungen werden auch Programmintern verwendet.

Die folgende Tabelle zeigt alle Konstanten und die dazugehörige deutschsprachigen Fehlermeldungen. Wie oben schon angedeutet, spielt das Vorzeichen keinerlei Bedeutung:

 Name   Wert   Fehlermeldung 
 _MSG_OK   1   Ok 
 _MSG_INFORMATION   2   INFORMATION:  
 _MSG_WARNING   3   WARNUNG:  
 _MSG_ERROR   4   FEHLER:  
 _MSG_SYSTEM_ERROR   5   Systemfehler #%d 
 _MSG_INTERNAL_ERROR_CODE   6   Interner Fehler #%d 
 _MSG_INTERNAL_ERROR_FILE   7   Interner Fehler in Datei '%s' Zeile #%u 
 _MSG_INTERNAL_ERROR_CODE_FILE   8   Interner Fehler #%d in Datei '%s' Zeile #%u 
 _MSG_TO_MANY_INFOS   9   Zu viele Informationen (max=%u). Weitere Informationen werden ignoriert. 
 _MSG_TO_MANY_WARNINGS   10   Zu viele Warnungen (max=%u). Weitere Warnungen werden ignoriert. 
 _MSG_TO_MANY_ERRORS   11   Zu viele Fehler (max=%u). Programm wird beendet. 
 _MSG_DIVISION_BY_NULL   12   Division durch Null 
 _MSG_NON_TERM_STRING   13   Zeichenkette nicht beendet 
 _MSG_CANT_OPEN_TCP_SOCKET   14   Kann TCP-Socket `%s' nicht öffnen 
 _MSG_CANT_OPEN_UDP_SOCKET   15   Kann UDP-Socket `%s:%u' nicht öffnen 
 _MSG_CANT_OPEN_FILE   16   Kann Datei `%s' nicht öffnen 
 _MSG_CANT_CREATE_FILE   17   Kann Datei `%s' nicht erzeugen 
 _MSG_FILE_NOT_FOUND   18   Datei `%s' nicht gefunden 
 _MSG_READ_ERROR   19   Fehler beim Lesen von Datei `%s' 
 _MSG_WRITE_ERROR   20   Fehler beim Schreiben in Datei `%s' 
 _MSG_EOP_EXPECTED   21   Parameterende erwartet 
 _MSG_EOL_EXPECTED   22   Zeilenende erwartet 
 _MSG_EOF_EXPECTED   23   Dateiende erwartet 
 _MSG_IF_LEVEL   24   Dateiende innerhalb 'if'-Ebene #%d 
 _MSG_TO_MANY_IF   25   Zu viele IF-THEN-ELSE (max=%u) 
 _MSG_ILL_ELSE   26   Illegales 'else' or 'else-if' 
 _MSG_ILL_ENDIF   27   Illegales 'endif' 
 _MSG_UNKNOWN_MACRO   28   Unbekanntes Macro `%s' 
 _MSG_ILL_MACRO   29   Illegales 'macro' 
 _MSG_ILL_ENDM   30   Illegales 'endm' oder 'endmacro' 
 _MSG_MIS_ENDM   31   Vermisse 'endm' oder 'endmacro' 
 _MSG_MIS_ENDL   32   Vermisse 'endl' oder 'endloop' 
 _MSG_MIS_ENDR   33   Vermisse 'endr' oder 'endrepeat' 
 _MSG_MIS_ENDW   34   Vermisse 'endw' oder 'endwhile' 
 _MSG_MIS_ENDF   35   Vermisse 'endf' oder 'endfor' 
 _MSG_ILL_ENDL   36   Illegales 'endl' oder 'endloop' 
 _MSG_ILL_ENDR   37   Illegales 'endr' oder 'endrepeat' 
 _MSG_ILL_ENDW   38   Illegales 'endw' oder 'endwhile' 
 _MSG_ILL_ENDF   39   Illegales 'endf' oder 'endfor' 
 _MSG_ILL_BREAK   40   Illegales 'break' 
 _MSG_ILL_CONT   41   Illegales 'continue' 
 _MSG_TO_FEW_ELEMENTS   42   Zu wenig Elemente (%u but not [%u..%u]) 
 _MSG_TO_MANY_ELEMENTS   43   Zu viele Elemente (%u but not [%u..%u]) 
 _MSG_TO_MANY_LOOPS   44   Zu viele Schleifen [LOOP,REPEAT,WHILE,FOR] (max=%u) 
 _MSG_TO_MANY_OPEN_REFERENCES   45   Zu viele offene Referenzen [l$*(), m$*()] (max=%u) 
 _MSG_ILL_ESCAPE   46   Illegale Escape-Sequenz '\%c' 
 _MSG_ILL_DELIM   47   Illegaler Begrenzer 
 _MSG_ILL_PARAMETER   48   Illegaler Parameter '%s' 
 _MSG_ILL_KEYWORD   49   Illegales Schlüsselwort `%s' 
 _MSG_MIS_KEYWORD   50   Vermisse Schlüsselwort 
 _MSG_MIS_THE_KEYWORD   51   Vermisse das Schlüsselwort `%s' 
 _MSG_MIS_PARAMETER   52   Vermisse Parameter 
 _MSG_MIS_ALPHANUM_ID   53   Vermisse alphanumerische ID 
 _MSG_MIS_NUMBER   54   Vermisse Zahl 
 _MSG_MIS_FNAME   55   Vermisse Dateiname 
 _MSG_MIS_CHAR   56   Vermisse das Zeichen '%c' 
 _MSG_MIS_CHAR2   57   Vermisse eines der beiden Zeichen '%c' oder '%c' 
 _MSG_AMBIGUOUS_KEYWORD   58   Mehrdeutiges Schlüsselwort `%s' 
 _MSG_ABBREV_KEYWORD   59   Abgekürztes Schlüsselwort `%s' nicht erlaubt 
 _MSG_KEYWORD_COMBINATION   60   Nicht erlaubte Kombination von Schlüsselwortern: %s 
 _MSG_UNKNOWN_KEYWORD   61   Unbekanntes Schlüsselwort `%s' 
 _MSG_UNKNOWN_SYMBOL   62   Unbekannte Variable `%s' 
 _MSG_UNKNOWN_FUNCTION   63   Unbekannte Funktion `%s' 
 _MSG_UNKNOWN_LABEL   64   Unbekannte Marke `%s' 
 _MSG_FORBIDDEN_FUNCTION   65   Verwendung der Funktion `%s' nicht erlaubt 
 _MSG_SOCKET_ACCESS_FORBIDDEN   66   Zugriff auf Socket nicht erlaubt: %s 
 _MSG_READ_ACCESS_FORBIDDEN   67   Lesezugriff nicht erlaubt: %s 
 _MSG_WRITE_ACCESS_FORBIDDEN   68   Schreibzugriff nicht erlaubt: %s 
 _MSG_INCLUDE_FORBIDDEN   69   'include' nicht erlaubt 
 _MSG_INCLUDE_FILE_FORBIDDEN   70   'include' der Datei `%s' nicht erlaubt 
 _MSG_UNKNOWN_OPTION_CHAR   71   Unbekannte Option `%c%c' 
 _MSG_UNKNOWN_OPTION_STR   72   Unbekannte Option `%s' 
 _MSG_OPTION_COMBINATION   73   Nicht erlaubte Kombination von Optionen: %s 
 _MSG_MIS_OPTION   74   Vermisse eine der folgenden Optionen: %s 
 _MSG_SYNTAX_ERROR   75   Syntaxfehler 
 _MSG_UNKNOWN_ERROR_NUM   76   Unbekannter Fehler #%d 
 _MSG_UNKNOWN_ERROR   77   Unbekannter Fehler 
 _MSG_USER   78    


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.13   Zeichenketten

Die folgenden Funktionen manipulieren Zeichenketten. Die Funktionen sind robust, so dass für jede Positions- und Längenangabe jeglicher Wert angegeben werden kann. Bei Positionsangaben wird zur Normierung die Funktion 'index()' angewendet: Zahlen < 0 werden als relative Angaben zum Zeichenkettenende angesehen.

Numerische Werte werden automatisch in Zeichenketten gemäß der Funktion 'string()' gewandelt, wenn eine Zeichenkette als Parameter gefordert wird.



6.13.1   length(), len()

  Syntax:   'length ( x )'
'len ( x )'

'len()' ist eine Kurzform für 'length()'. Es wird die Länge der Zeichenkette X geliefert. Ist X eine Zahl, dann wird die Zahl in einen Text gewandelt und anschließend die Länge des Textes ermittelt.


6.13.2   size()

  Syntax:   'size ( ????? )'

  --- ??? ---  


6.13.3   extract()

  Syntax:   'extract ( string, von, bis )'

Aus einem STRING wird der Bereich von VON bis ausschließlich BIS kopiert -- also 'BIS-VON' Zeichen. Falls nach der Normierung BIS <= VON, dann wird eine leere Zeichenkette als Ergebnis geliefert.


6.13.4   remove()

  Syntax:   'remove ( string, von, bis )'

Diese Funktion ist das Gegenteil zu 'extract()'. Aus einem STRING werden alle Zeichen mit Ausnahme des Bereiches von VON bis ausschließlich BIS kopiert. Falls nach der Normierung BIS <= VON, dann werden alle Zeichen für das Ergebnis verwendet.


6.13.5   mid()

  Syntax:   'mid ( string, pos )'
'mid ( string, pos, n )'

Aus einem STRING werden ab Position POS bis zu N Zeichen kopiert. Sollte N < 0 sein, dann werden abs(N) Zeichen, die sich vor der Position POS befinden, geliefert. Wird kein N angegeben, dann werden alle Zeichen ab Position POS kopiert.


6.13.6   left()

  Syntax:   'left ( string, n )'

Aus einem STRING werden die ersten N Zeichen kopiert. Ist N < 0, dann werden alle Zeichen bis auf die letzten abs(N) Zeichen kopiert.


6.13.7   right()

  Syntax:   'right ( string, n )'

Aus einem STRING werden die letzten N Zeichen kopiert. Ist N < 0, dann werden alle Zeichen bis auf die ersten abs(N) Zeichen kopiert.


6.13.8   insert()

  Syntax:   'insert ( string, pos, text )'

Der Text TEXT wird an der Position POS in STRING eingefügt und der zusammengesetzte String als Ergebnis geliefert.


6.13.9   append()

  Syntax:   'append ( string, text )'

Der Text TEXT wird ans Ende von STRING eingefügt.


6.13.10   replace()

  Syntax:   'replace ( string, pos, text )'

Der Text TEXT wird ab der Position POS ins STRING eingefügt, wobei existierende Zeichen überschrieben werden.


6.13.11   subst()

  Syntax:   'subst ( string, search, replace )'
'subst ( string, search, replace, count )'

In der Zeichenkette STRING wird der Text SEARCH gesucht und durch REPLACE ersetzt. Dieses wird bis zu COUNT mal wiederholt. Ist COUNT < 0 oder nicht angegeben, dann werden alle Vorkommen von SEARCH ersetzt.


6.13.12   substRE()

  Syntax:   'substRE ( string, reg_expr, replace )'
'substRE ( string, reg_expr, replace, count )'
'substRE ( string, reg_expr, replace, count, ignore_case )'

In der Zeichenkette STRING wird jede Stelle, die dem regulären Ausdruck REG_EXPR entspricht, durch REPLACE ersetzt. Dabei werden maximal COUNT Ersetzungen vorgenommen. Ist COUNT < 0 oder nicht angegeben, dann werden alle Vorkommen von REG_EXPR ersetzt.

Ist IGNORE_CASE ==WAHR, dann wird Groß-/Kleinschreibung ignoriert.


6.13.13   substchar()

  Syntax:   'substchar ( string, search, [replacements...] )'

In der Zeichenkette STRING werden alle Vorkommen der einzelnen Zeichen in SEARCH gesucht und durch ein passendes REPLACEMENT ersetzt. Es werden also einzelne Zeichen durch verschiedene Zeichenketten ersetzt. Dabei wird für das N-te Zeichen aus SEARCH die N-te Zeichenkette, also der (N+2)-te Paramter verwendet. Ist kein REPLACEMENT angegeben, dann werden alle gefundenen Zeichen gelöscht. Existiert der (N+2)-te Parameter nicht, dann wird der letzte Parameter verwendet. Damit kann man eine Gruppe von Zeichen durch eine Zeichenkette ersetzen.


6.13.14   translate()

  Syntax:   'translate ( string, search, replace )'

In der Zeichenkette STRING werden alle Vorkommen der einzelnen Zeichen in SEARCH gesucht und durch ein passendes REPLACEMENT ersetzt. Dabei wird für das N-te Zeichen aus SEARCH das N-te Zeichen aus REPLACE verwendet. Existiert das N-te Zeichen nicht in REPLACE, so wird das letzte Zeichen aus REPLACE verwendet. Ist REPLACE leer, dann werden alle gefundenen Zeichen durch '\0' ersetzt.


6.13.15   word(), seperator()

  Syntax:   'word ( string, index )'
'seperator ( string, index )'

Aus dem STRING wird das Wort mit dem angegebenen INDEX kopiert. Worte sind Zeichenketten, die nur aus Ziffern, Buchstaben, '_', '.' oder '$' bestehen. Worte werden untereinander durch eine beliebige Anzahl beliebiger anderer Zeichen getrennt. Der INDEX ist aus dem Bereich 0 bis N.

'word()' liefert das entsprechende Wort als Ergebnis. 'seperator() 'liefert den Trenner vor dem entsprechenden Wort, wobei alle Nicht-Wort-Zeichen zum Trenner gehören.


6.13.16   item()

  Syntax:   'item ( string, index )'
'item ( string, index, seperator )'

'item()' arbeitet ähnlich wie 'itemRE()' und 'word()'. Aus dem STRING wird das Wort mit dem angegebenen INDEX kopiert. Worte werden durch die Zeichenfolge SEPERATOR getrennt. Ohne Angabe von SEPERTOR wird ein Komma als Trennzeichen verwendet.

Der INDEX ist aus dem Bereich 0 bis N. Bei INDEX < 0 oder INDEX > N, dann wird eine leere Zeichenkette geliefert. Der Index des größtem Elementes N kann mittles 'count()' ermittelt werden.


6.13.17   itemRE()

  Syntax:   'itemRE ( string, index, reg_expr )'
'itemRE ( string, index, reg_expr, ignore_case )'

'itemRE()' arbeitet ähnlich wie 'item()' und 'word()'. Aus dem STRING wird das Wort mit dem angegebenen INDEX kopiert. Worte werden durch den regulären Ausdruck REG_EXPR voneinander getrennt.

Der INDEX ist aus dem Bereich 0 bis N. Bei INDEX < 0 oder INDEX > N, dann wird eine leere Zeichenkette geliefert. Der Index des größtem Elementes N kann mittles 'countRE()' ermittelt werden.

Ist IGNORE_CASE WAHR, dann wird Groß-/Kleinschreibung ignoriert.


6.13.18   count()

  Syntax:   'count ( string, search )'

Diese Funktion zählt, wie häufig der Suchstring SEARCH in der Zeichenkette STRING vorkommt.


6.13.19   countRE()

  Syntax:   'countRE ( string, ref_expr )'
'countRE ( string, ref_expr, ignore_case )'

Diese Funktion zählt, wie häufig der regulären Ausdruck REG_EXPR in der Zeichenkette STRING vorkommt.

Ist IGNORE_CASE WAHR, dann wird Groß-/Kleinschreibung ignoriert.


6.13.20   sort()

  Syntax:   'sort ( string )'
'sort ( string, seperator )'

Die Zeichenkette wird in einzelne Elemente zerlegt, die anschließend wieder alphabetisch sortiert zusammengefügt werden, wobei doppelte Einträge eleminiert werden. Die Zeichenkette SEPERATOR gibt die Trennzeichen zwischen den Einträgen vor und nach der Sortierung an. Ohne Angabe von SPERATOR, oder falls SEPERATOR keine gültige Zeichenkette mit mindestens einem Zeichen ist, wird ein Komma als Trennzeichen verwendet.


6.13.21   sortlex()

  Syntax:   'sortlex ( ????? )'

  --- ??? ---  


6.13.22   expand()

  Syntax:   'expand ( string, newlen, expstr )'
'expand ( string, newlen, expstr, mode )'

Aus Kompatibilität zur alten Implementierung von expand() sind negative Werte für NEWLEN erlaubt:

  • Sollte NEWLEN<0 sein, dann wird das Bit _EXP_TRUNCATE im Parameter mode gesetzt und für den weiteren Verlauf gilt: NEWLEN = abs(NEWLEN).

Die Zeichenkette STRING wird auf die Länge NEWLEN erweitert. Ist jedoch NEWLEN < length(STRING), dann bleibt je nach Option STRING unverändert oder wird auf eine Länge von NEWLEN gekürzt.

Bei einer Erweiterung wird mehrfach das Muster EXPSTR verwendet. Durch die Bitmaske MODE wird die Art und Weise des Auffüllens festgelegt. Dazu sollten sie folgenden Werte ODER verknüpft werden; bei fehlendem MODE wird '_EXP_RIGHT'' verwendet:

  • EXP_LEFT
    Diese Option legt fest, dass die Erweiterung der Zeichenkette auf der linken Seite vor dem ersten Zeichen stattfindet. Sollten sowohl das Bit EXP_LEFT als auch das Bit EXP_RIGHT gesetzt sein oder keines von beiden gesetzt sein, dann werden beide Seiten erweitert.
  • EXP_RIGHT
    Diese Option legt fest, dass die Erweiterung der Zeichenkette auf der rechten Seite nach dem letzten Zeichen stattfindet. Sollten sowohl das Bit EXP_LEFT als auch das Bit EXP_RIGHT gesetzt sein oder keines von beiden gesetzt sein, dann werden beide Seiten erweitert.
  • EXP_BOTH
    EXP_BOTH ist eine Abkürzung für die Kombination EXP_LEFT|EXP_RIGHT.
  • EXP_WHOLE
    Normalerweise wird Muster expand wird so häufig wie möglich verwendet um die Zeichenkette aufzufüllen. Dabei wird am Ende auch ein Teilstück von expand verwendet.

    Ist jedoch EXP_WHOLE oder EXP_FILL gesetzt, dann wird exp nur im ganzen verwendet und ggf.\ Leerzeichen am Anfang und am Ende eingefügt.

  • EXP_FILL
    EXP_FILL ist eine Erweitrung zu EXP_WHOLE: Ist EXP_FILL gesetzt, dann wird exp nur im ganzen verwendet und ggf.\ Leerzeichen eingefügt. Diese Leerzeichen werden gleichmäßig zwischen den Vorkommen von exp sowie am Anfang und Ende verteilt.
  • EXP_ADJUST
    Durch EXP_ADJUST erscheinen die Kopien von exp immer an den gleichen Zeichenketten-Positionen, unabhängig davon, wie lang die Zeichenkette vorher war. EXP_ADJUST kann auch mit EXP_FILL kombiniert werden.

    Hierdurch erreicht man ein einheitliches Aussehen, wenn mehrere erweiterte Zeilen untereinander dargestellt werden. Auch die Verwenduing von alternierenden Mustern für exp (z.B. '-+' und '+-') erhöht die Ansehnlichkeit.

  • EXP_TRUNCATE
    Ist die Ausgangs-Zeichenkette länger als die gewünschte Länge, dann bleibt sie inverändert. Ist jedoch das Bit EXP_TRUNCATE gesetzt, dann wird Ausgangs-Zeichenkette am Ende auf die Wunschlänge gekürzt.

Beispiele
 STRING   LEN   EXP   MODE   Ergebnis 
 Dirk   20   *   _EXP_LEFT|_EXP_RIGHT   ********Dirk******** 
 Clemens   20   *   _EXP_BOTH   *******Clemens****** 
 Clemens   20   *   _EXP_RIGHT   Clemens************* 
 Clemens   20   *   _EXP_LEFT   *************Clemens 
 aaa   20   12345   _EXP_BOTH   123451234aaa12345123 
 aaa   20   12345   _EXP_BOTH|_EXP_WHOLE     12345  aaa 12345   
 aaaaa   20   12345   _EXP_BOTH   12345123aaaaa1234512 
 aaaaa   20   12345   _EXP_BOTH|_EXP_WHOLE    12345  aaaaa 12345  
 a   20   1234   _EXP_BOTH|_EXP_WHOLE    12341234 a12341234  
 a   20   1234   _EXP_BOTH|_EXP_WHOLE|_EXP_FILL   1234  1234a1234 1234 
 a   20   12345   _EXP_RIGHT|_EXP_ADJUST   a    123451234512345 
 aaa   20   12345   _EXP_RIGHT|_EXP_ADJUST   aaa  123451234512345 
 aaaaa   20   12345   _EXP_RIGHT|_EXP_ADJUST   aaaaa123451234512345 
 aaaaaaa   20   12345   _EXP_RIGHT|_EXP_ADJUST   aaaaaaa   1234512345 
 aaaaaaaaa   20   12345   _EXP_RIGHT|_EXP_ADJUST   aaaaaaaaa 1234512345 
 1234567890   5   xxxxx   _EXP_BOTH   1234567890 
 1234567890   5   xxxxx   _EXP_BOTH|_EXP_TRUNCATE   12345 


6.13.23   trim()

  Syntax:   'trim ( string )'
'trim ( string, mode )'

Aus der Zeichenkette STRING werden Leerzeichen und Steuerzeichen (ASCII 1 bis 32) durch ein einfaches Leerzeichen ersetzt oder entfernt. Die Steuerung erfolgt durch die Bitmaske MODE, wobei bei fehlendem MODE der Wert 7 verwendet wird:

  • _TRIM_BEGIN:
    Alle führenden Leerzeichen und Steuerzeichen werden entfernt.
  • _TRIM_END:
    Alle Leerzeichen und Steuerzeichen am Ende von STRING werden entfernt.
  • _TRIM_MULTI:
    Alle mehrfachen vorkommen von Leerzeichen und Steuerzeichen werden durch genau ein Leerzeichen ersetzt. Bereiche von STRING, dir durch einfache oder doppelte Hochkommata eingeschlossen sind, bleiben unverändert. (siehe auch Bit _TRIM_STRING)
  • _TRIM_STRING:
    Bit _TRIM_STRING ist eine Ergänzung zu Bit _TRIM_MULTI: Einfache oder doppelte Hochkommata werden nicht als besondere Zeichen betrachtet.
  • _TRIM_BOTH:
    '_TRIM_BOTH' ist eine Abkürzung von '_TRIM_BEGIN|_TRIM_END'.
  • _TRIM_STD:
    '_TRIM_STD' ist eine Abkürzung von '_TRIM_BOTH|_TRIM_MULTI'.
  • _TRIM_STD_STRING:
    '_TRIM_STD_STRING' ist eine Abkürzung von '_TRIM_STDH|_TRIM_STRING'.

In dem folgenden Beispielen werden Leerzeichen durch Punkte ('.') dagestellt:

Beispiele
 STRING   MODE   Ergebnis 
 ..a..b..c..   _TRIM_BEGIN   a..b..c.. 
 ..a..b..c..   _TRIM_END   ..a..b..c 
 ..a..b..c..   _TRIM_MULTI   .a.b.c. 
 ..a..b..c..   _TRIM_BEGIN|_TRIM_END   a..b..c 
 ..a..b..c..   _TRIM_BEGIN|_TRIM_END|_TRIM_MULTI   a.b.c 
 ..a..'..b..c..'..d..   _TRIM_STD   a.'..b..c..'.d 
 ..a..'..b..c..'..d..   _TRIM_STD_STRING   a.'.b.c.'.d 


6.13.24   breakintolines()

  Syntax:   'breakintolines ( xsize )'
'breakintolines ( ysize )'
'breakintolines ( bool:small )'
'breakintolines ( bool:leave_spaces )'
'breakintolines ( ignore_char )'

  --- ??? ---  


6.13.25   char()

  Syntax:   'char ( num )'
'char ( num, n )'

Es wird ein String der Länge N erzeugt, wobei N auf den Bereich 0:4 normiert wird. Ohne Angabe von N wird 1 verwendet. Das erste Zeichen der Zeichenkette entspricht den unteren 8 Bits der Ganzzahl NUM, das nächste Zeichen den nächsten Bits usw. In der ersten Form wird also eine Zahl in das Zeichen mit dem gleichen Kode gewandelt.


6.13.26   ord()

  Syntax:   'ord ( string )'
'ord ( string, n )'

Diese Funktion ist die Umkehrfunktion zu 'char()'. Aus den ersten N Zeichen der Zeichenkette wird eine Ganzzahl erzeugt, wobei N auf den Bereich 0:4 normiert wird. Ohne Angabe von N wird 1 verwendet. Das erste Zeichen wird in den niederwertigsten 8 Bits gespeichert, das nächste Byte in den nächsten 8 Bits, usw.


6.13.27   chgcase()

  Syntax:   'chgcase ( string )'

Alle Kleinbuchstaben der Zeichenkette STRING werden in Großbuchstaben und alle Großbuchstaben werden in Kleinbuchstaben gewandelt. Umlaute und Sonderbuchstaben mit Apostroph etc. werden auch gewandelt.

Beispiel: Aus 'Hallo Dirk äöü' wird 'hALLO dIRK ÄÖÜ'.


6.13.28   lower()

  Syntax:   'lower ( string )'

Alle Großbuchstaben der Zeichenkette STRING werden in Kleinbuchstaben gewandelt. Umlaute und Sonderbuchstaben mit Apostroph etc. werden auch gewandelt.

Beispiel: Aus 'Hallo Dirk' wird 'hallo dirk'.


6.13.29   upper()

  Syntax:   'upper ( string )'

Alle Kleinbuchstaben der Zeichenkette werden in Großbuchstaben gewandelt. Umlaute und Sonderbuchstaben mit Apostroph etc. werden auch gewandelt.

Beispiel: Aus 'Hallo Dirk' wird 'HALLO DIRK'.


6.13.30   capitals()

  Syntax:   'capitals ( string )'

Alle Anfangsbuchstaben der Zeichenkette werden in Großbuchstaben gewandelt, alle anderen Buchstaben in Kleinbuchstaben.

Anfangsbuchstaben sind alle Buchstaben, vor denen kein anderer Buchstabe steht.

Beispiel: Aus 'haLLo dirk' wird 'Hallo Dirk'.


6.13.31   sortstring()

  Syntax:   'sortstring ( string )'

Aus STRING wird ein Zeichenkette erzeugt, die für alphabetische Vergleiche mit anderen Zeichenketten nach deutschen Sortierregeln verwendet werden kann.

Die Konvertierung erfolgt im Detail wie folgt:

  1. Alle Ziffern bleiben erhalten.

  2. Umlaute und Doppelbuchstaben sowie einige Sonderzeichen wie '1/4' werden in zwei Zeichen (Kleinbuchstaben oder Ziffern) gewandelt.

  3. Alle Buchstaben, auch die mit Accent oder ähnlichen Erweiterungen, werden in die 26 Kleinbuchstaben gewandelt.

  4. Alle Sonderzeichen werden in Minuszeichen gewandelt.

  5. Alle Steuerzeichen werden Leerzeichen gewandelt.

  6. Mehrfache Sonderzeichen (d.h. Minuszeichen nach der obigen Wandlung) werden zu einem Minuszeichen zusammengefaßt.

  7. Mehrfache Leerzeichen werden zu einem Leerzeichen zusammengefaßt.

  8. Leerzeichen am Anfang und am Ende der Zeichenekette sowie vor und nach einem Minuszeichen werden entfernt.

Das Ergebnis kann wegen der Wandlung der Umlaute länger als die Quelle sein, ist aber häufig kürzer.


6.13.32   scan()

  Syntax:   'scan ( text )'
'scan ( text, intbase )'

'TEXT' wird analysiert und in eine Ganzzahl (32 oder 64 Bit), eine Fließkommazahl oder eine neue Zeichenkette gewandelt. Der optionale zweite Parameter legt die Basis für die Erkennung einer Ganzzahl fest.

Insbesondere kann die Funktion auch als Gegenstück zu 'print("%y",variable)' verstanden werden. So liefert 'scan(print("%y",variable))' genau den Inhalt von VARIABLE wieder.

Für das Einlesen von Größenangaben kann auch die Funktion 'scansize()' verwendet werden.

Für das Einlesen von römischen Zahlen sollte die Funktion 'scanroman()' verwendet werden.

Die Zeichen der Zeichenkette 'TEXT', die nicht für die Umwandlung verwendet wurden, werden in der Variable '$RESULT2' abgespeichert.

Die Umwandlung erfolgt nach den folgenden Regeln, wobei weder Variablennamen noch Ausdrücke ausgewertet werden:

  1. Vor dem eigentlichen Operanden (Zahlenwert, Zeichenkette oder Ausdruck) dürfen beliebig viele Vorzeichen stehen, die durch die obige Tabelle erklärt sind. Diese Vorzeichen werden von rechts nach links abgearbeitet. (siehe Operanden)

  2. Beginnt der Operand mit einem einfachen (') oder doppelten (") Hochkomma, dann handelt es sich um eine Zeichenkette. Der allgemeine Aufbau von Zeichenketten ist im Abschnitt Zeichenketten beschrieben.

  3. Beginnt der Operand mit einer Ziffer, so handelt es sich um eine Zahl. Folgt auf einer Ziffernfolge ein Dezimalpunkt oder eine 'E', dann handelt es sich um eine Fließkommazahl. Wird die Zahl von '0x' geführt und enthält sie ein 'p' mit einer folgenden Dezimalzahl, dann handelt es sich um eine Fließkommazahl im Hexadezimalformat.

    In den anderen Fällen handelt es sich um eine Ganzzahl. Die Wandlungen von Text in Ganzzahlen werden im Abschnitt Ganzzahlen beschrieben.

    Klein- und Großschreibung sind beim Einlesen von Zahlen unerheblich.

  4. Das '*' anstatt einer Zahl bedeutet die größtmögliche 32 Bit Ganzzahl2.147.483.647 ). '*q' bedeutet die größtmögliche 64 Bit Ganzzahl9.223.372.036.854.775.807 ).

    Um die kleinstmöglichen Ganzzahlen zu erhalten, kann man das Negationsvorzeichen ( '~' oder '^' ) verwenden. Diese kleinsten Zahlen sind -2.147.483.648 bzw. -9.223.372.036.854.775.808.

  5. Eine in spitzen Klammern ('<' und '>') eingeschlossene Liste wird als Bitmaske interpretiert. Innerhalb einer solchen Liste müssen die Operanden untereinander durch Kommata getrennt werden. Jeder Operand definiert ein Bit, welches in der Ganzzahl gesetzt wird. Folgt dem Größerzeichen '>' ein 'q' oder 'Q', dann wird die resultierende Zahl als 64 Bit Ganzzahl, sonst als 32 Bit Ganzzahl interpretiert.

    Der Aufbau solcher Bitmasken ist im Abschnitt Operanden beschrieben.


6.13.33   scansize()

  Syntax:   'scansize ( text )'
'scansize ( text, intbase )'

'TEXT' wird analysiert und in eine Ganzzahl (32 oder 64 Bit) gewandelt. Der optionale zweite Parameter legt die Basis für die Erkennung der Ganzzahl fest.

  --- ??? ---  


6.13.34   print()

  Syntax:   'print ( format, ... )'

Es wird eine Zeichenkette ähnlich wie bei der C Routine printf() erzeugt.

Sollte 'FORMAT' eine Ganzzahl, dann wird zunächst eine Fehlermeldung mit der passenden Nummer erzeugt. Dazu wird intern 'FORMAT' durch das Ergebnis der Funktion 'message(FORMAT)' ersetzt.

FORMAT ist die Steuerzeichenkette, die neben normalen Zeichen Steuersequenzen enthalten kann. Normale Zeichen werden direkt in die Zielzeichenkette kopiert. Steuersequenzen beginnen mit '%' und haben den folgenden Aufbau:

'%'[Selektor ':'][Flag][Feldweite]['.' Genauigkeit] Kontrollzeichen

Die Angaben in eckigen Klammern '[]' sind optional. Das '%' Zeichen leitet immer die Steuersequenz ein. Um ein einzelnes '%' auszugeben muß '%%' verwendet werden.

  • Selektor
    Für jede Steuersequenz wird genau ein Parameter benötigt. Nach dem letzten Parameter wird zyklisch wieder der erste Parameter verwendet.

    Durch die Angabe der Ganzzahl kann direkt ein Parameter ausgewählt werden. Die Nummerierung der Parameter beginnt bei '1'.

    Beispiel: 'print("%d %d %1:d %d %d %d",1,2,3)' erzeugt '1 2 1 2 3 1'

  • Flags
    Die folgenden Flags können verwendet werden:
    '-' Die Ausrichtung erfolgt nach links anstatt nach recht.
    '+' Zahlen beginnen immer mit führendem '+' oder '-'
    ':' Nur bei Ganzzahlen möglich ( b, d, i, o, u, x, X ): Zahlen werden mit einem Gruppierungszeichen dargestellt.
    '>' Nur bei Ganzzahlen möglich ( b, d, i, o, u, x, X ): Das Vorzeichen wird rechts von der Zahl dargestellt.
    ' ' Positive Zahlen beginnen immer mit einem Leerzeichen. (oder mit '+')
    '#' Bei der 'x' und 'X' Umwandlung wird bei einem Wert ungleich 0 die Zeichenfolge '0x' vorangestellt. Bei der 'o' Umwandlung wird bei einem Wert ungleich 0 eine 0 '0x' vorangestellt. Bei Fließkommanumwandlungen (e, E, f, g, G) wird der Punkt Nullen der Nachkommastellen immer angezeigt.

  • Feldweite
    Die Ganzzahl gibt die minimale Anzahl der Zeichen an. Beginnt diese Zahl mit einer '0', dann werden führende Nullen eingefügt.

  • Genauigkeit
    Je nach Typ der Umwandlung hat dieses Feld verschiedene Bedeutungen:
    • Ganzzahl ( b, d, i, o, u, x, X )
      Minimale Anzahl der angezeigten Ziffern
    • Fließkommazahl ( e, E, f, g, G )
      Anzahl der Dezimalstellen nach dem Komma
    • Zeichenkette ( s )
      Maximale Zeichenanzahl, die ausgegeben wird.

  • Kontrollzeichen
    'b' Die Ganzzahl wird als vorzeichenlose Binärzahl (nur 0 und 1) ausgegeben.
    'c' Das niederwertigste Byte der Ganzzahl wird als Zeichen ausgegeben.
    'd', 'i' Ausgabe als vorzeichenbehaftete Dezimalzahl
    'o' Ausgabe als vorzeichenlose Oktalzahl
    'u' Ausgabe als vorzeichenlose Dezimalzahl
    'x', 'X' Ausgabe als vorzeichenlose Hexadezimalzahl, bei der für die Ziffern 10-15 die Buchstaben a-f oder A-F verwendet werden.
    'e', 'E' Ausgabe einer Fließkommazahl in Wissenschaftlicher Notation, d.h. in Expotential Schreibweise (*.*****E+**). Der Exponend wird durch 'e' oder 'E' eingeleitet.
    'f' Aussgabe einer Fließkommazahl ohne Exponent.
    'g', 'G' Ausgabe im 'e' ('E') oder 'f' Format. Abhängig von dem Wert der Fließkommazahl.
    's' Ausgabe einer Zeichenkette.
    'y', 'Y' Ausgabe eines beliebigen Datentyps, so dass die Daten konsistent und verlustfrei wieder eingelesen werden können. Flags, Feldweite und Genauigkeit werden mit Ausnahme von Zeichenketten ignoriert. Bei einer Zahlenausgabe mittels 'Y' wird eine normierte Hexadezimaldarstellung ausgegeben.

    Zeichenketten werden automatisch in " eingeschlossen und nicht druckbare Zeichen werden als Escape-Sequenzen dargestellt. Bei Angabe einer Feldweite wird evtl. die Zeichenkette umgebrochen. Die Feldweite gibt die Feldweite der ersten Zeile an, die Genauigkeit die Feldweite weiterer Zeilen. Die Folgezeilen werden automatisch um 1 Tabulator eingerückt.


6.13.35   find()

  Syntax:   'find ( string, substring )'
'find ( string, substring, pos )'
'find ( string, substring, pos, skip_count )'

Im STRING wird das erste Vorkommen von SUBSTRING ab Position POS gesucht, wobei bei fehlendem POS der Wert 0 verwendet wird. Als Ergebnis wird die Position des ersten übereinstimmenden Zeichens geliefert; 0 für das erste Zeichen. Existiert keine Übereinstimmung, dann ist das Ergebnis -1.

Wird SKIP_COUNT angegeben, dann werden die ersten SKIP_COUNT Vorkommen ignoriert.


6.13.36   findrevers()

  Syntax:   'findrevers ( string, substring )'
'findrevers ( string, substring, pos )'
'findrevers ( string, substring, pos, skip_count )'

Im STRING wird das erste Vorkommen von SUBSTRING ab Position POS gesucht, und zwar Rückwärts, wobei bei fehlendem POS der Wert -1 (letztes Zeichen) verwendet wird. Als Ergebnis wird die Position des ersten übereinstimmenden Zeichens geliefert; 0 für das erste Zeichen. Existiert keine Übereinstimmung, dann ist das Ergebnis -1.

Wird SKIP_COUNT angegeben, dann werden die ersten SKIP_COUNT Vorkommen ignoriert.


6.13.37   findRE()

  Syntax:   'findRE ( string, reg_expr )'
'findRE ( string, reg_expr, pos )'
'findRE ( string, reg_expr, pos, ignore_case )'
'findRE ( string, reg_expr, pos, ignore_case, skip_count )'

Im STRING wird das erste Vorkommen des regulären Ausdruck REG_EXPR ab Position POS gesucht, wobei bei fehlendem POS der Wert 0 verwendet wird. Als Ergebnis wird die Position des ersten übereinstimmenden Zeichens geliefert; 0 für das erste Zeichen. Existiert keine Übereinstimmung, dann ist das Ergebnis -1.

Ist IGNORE_CASE WAHR, dann wird Groß-/Kleinschreibung ignoriert.

Wird SKIP_COUNT angegeben, dann werden die ersten SKIP_COUNT Vorkommen ignoriert.


6.13.38   split()

  Syntax:   'split ( ????? )'

  --- ??? ---  


6.13.39   splitRE()

  Syntax:   'splitRE ( ????? )'

  --- ??? ---  


6.13.40   match()

  Syntax:   'match ( string, pattern )'

Es wird überprüft, ob die Suchmaske PATTERN sich auf STRING abbilden läßt. Der Aufbau einer Suchmaske ist im Abschnitt Verwendung von Platzhaltern beschrieben.


6.13.41   checkkeyword()

  Syntax:   'checkkeyword ( keyword, table, abrev_allowed )'

Es wird die Existenz von 'KEYWORD' in der Tabelle 'TABLE' überprüft.

'TABLE' besteht dazu aus meheren Elementen, die untereinander durch Semikola getrennt sind. Innerhalb eines Elementes können mehrere gleichwertige Alternativen mittels Komma getrennt werden.

  --- ??? ---  


6.13.42   encode64()

  Syntax:   'encode64 ( string, max_line_len )'

  --- ??? ---  

Mit dieser Funktion wird eine beliebige Zeichenkette so kodiert, dass das Ergebnis nur aus Ziffern, Groß- und Kleinbuchstaben, sowie Pluszeichen und Divisionszeichen, also aus 64 verschiedene Zeichen besteht. Die Kodierung erfolgt gemäß Base64 Regeln. Dabei wird natürlich die Zeichenkette länger: Aus 3 Zeichen werden 4. Die Funktion 'decode64()' kann zum dekodieren verwendet werden.


6.13.43   decode64()

  Syntax:   'decode64 ( string, bool:ignore_blanks )'

Diese Funktion dekodiert Zeichenketten, die zovor mittel 'encode64()' kodiert worden sind. Dabei werden alle Zeichen bis zum ersten ungültigen Zeichen gelesen. Der zweite Parameter wird als <logischer.Ausdruck>ausgewertet. Ist er WAHR, dann werden Leerzeichen, TAB, CR, LF und FF einfach ignoriert. Damit können dann auch formatierte Texte dekodiert werden. Die Dekodierung erfolgt gemäß Base64 Regeln.


6.13.44   encode64()

  Syntax:   'encode64 ( string )'

  --- ??? ---  

Mit dieser Funktion wird eine beliebige Zeichenkette so kodiert, dass das Ergebnis nur aus Ziffern, Groß- und Kleinbuchstaben, sowie Minuszeichen und Punkt besteht, also aus 64 verschiedene Zeichen besteht. Dabei wird natürlich die Zeichenkette länger: Aus 3 Zeichen werden 4. Die Funktion 'decode64()' kann zum dekodieren verwendet werden.


6.13.45   decode64()

  Syntax:   'decode64 ( string, bool:ignore_blanks )'

Diese Funktion dekodiert Zeichenketten, die zovor mittel 'encode64()' kodiert worden sind. Dabei werden alle Zeichen bis zum ersten ungültigen Zeichen gelesen. Der zweite Parameter wird als <logischer.Ausdruck>ausgewertet. Ist er WAHR, dann werden Lerrzeichen, TAB, CR, LF und FF einfach ignoriert. Damit können dann auch formatierte Texte dekodiert werden.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.14   Listen

  --- ??? ---  




6.14.1   l$clear()

  Syntax:   'l$clear ( list_var )'

Nach der Ausführung der Funktion exisatiert die Variable LIST_VAR wobei natürlich auch indizierte Variablen erlaubt sind. Der Wert von LIST_VAR ist eine leere Liste. Als Funktionsergebnis wird '0' geliefert.


6.14.2   l$append()

  Syntax:   'l$append ( list_var, x )'

Nach der Auswertung aller Parameter wird die Existens und der Typ der Variablen LIST_VAR überprüft, wobei natürlich auch indizierte Variablen erlaubt sind. Existiert diese nicht oder handelt es sich nicht um eine LISTE, dann wird eine leere Liste mit dem angegebenen Variablennamen (und Index) erzeugt.

Anschließend wird der Wert X als letztes und neues Element angefügt.

Als Funktionsergebnis wird der Index des neuen Elementes geliefert.


6.14.3   l$insert()

  Syntax:   'l$insert ( list_var, index, x )'

Nach der Auswertung aller Parameter wird die Existens und der Typ der Variablen LIST_VAR überprüft, wobei natürlich auch indizierte Variablen erlaubt sind. Existiert diese nicht oder handelt es sich nicht um eine LISTE, dann wird eine leere Liste mit dem angegebenen Variablennamen (und Index) erzeugt.

Anschließend wird der Wert X an der Position INDEX eingefügt. Alle nachfolgenden Element werden um eine Postion nach hinten geschoben. Das erste Element hat den Index 0.

Der INDEX ist robust, so dass für ihn jeglicher Wert angegeben werden kann. Bei Positionsangaben wird zur Normierung die Funktion 'index()' angewendet: Werte < 0 werden als relative Angaben zum Listenende angesehen. Sind die Werte nach der Nomierung < 0, so wird 0 verwendet. Ist INDEX > als die Elementanzahl, so werden viele neue Elemente mit dem Wert @NONE als Füller eingefügt.

Als Funktionsergebnis wird der Index des neuen Elementes geliefert.


6.14.4   l$replace()

  Syntax:   'l$replace ( list_var, index, x )'

Nach der Auswertung aller Parameter wird die Existens und der Typ der Variablen LIST_VAR überprüft, wobei natürlich auch indizierte Variablen erlaubt sind. Existiert diese nicht oder handelt es sich nicht um eine LISTE, dann wird eine leere Liste mit dem angegebenen Variablennamen (und Index) erzeugt.

Anschließend wird der Wert an der Position INDEX durch den Wert X überschrieben.

Der INDEX ist robust, so dass für ihn jeglicher Wert angegeben werden kann. Bei Positionsangaben wird zur Normierung die Funktion 'index()' angewendet: Werte < 0 werden als relative Angaben zum Listenende angesehen. Sind die Werte nach der Nomierung < 0, so wird 0 verwendet. Ist INDEX > als die Elementanzahl, so werden viele neue Elemente mit dem Wert @NONE als Füller eingefügt.

Als Funktionsergebnis wird der Index des neuen Elementes geliefert.


6.14.5   l$remove()

  Syntax:   'l$remove ( list_var, index )'

Nach der Auswertung aller Parameter wird die Existens und der Typ der Variablen LIST_VAR überprüft, wobei natürlich auch indizierte Variablen erlaubt sind. Existiert diese nicht oder handelt es sich nicht um eine LISTE, dann wird eine leere Liste mit dem angegebenen Variablennamen (und Index) erzeugt.

Anschließend wird das Element, sofern existent, aus der Liste entfernt. Alle nachfolgenden Element werden um eine Postion nach vorner geschoben.

Der INDEX ist robust, so dass für ihn jeglicher Wert angegeben werden kann. Bei Positionsangaben wird zur Normierung die Funktion 'index()' angewendet: Werte < 0 werden als relative Angaben zum Listenende angesehen.

Als Funktionsergebnis wird der Index des entferneten Elementes geliefert, oder -1, falls kein Element entfernt wurde.


6.14.6   l$length()

  Syntax:   'l$length ( list_var )'

Zuerst wird die Existens und der Typ der Variablen LIST_VAR überprüft, wobei natürlich auch indizierte Variablen erlaubt sind. Existiert diese nicht oder handelt es sich nicht um eine LISTE, dann wird eine leere Liste mit dem angegebenen Variablennamen (und Index) erzeugt.

Als Funktionsergebnis wird die Anzahl der Elemente der Liste geliefert.


6.14.7   l$size()

  Syntax:   'l$size ( list_var )'

Eine LISTE wird intern als dynamisches Array verwaltet. l$size() liefert dabei die Anzahl der Elemente, die dieses dynamisches Array momentan aufnehmen kann. Soll das Array mehr Elemente aufnehmen, so erfolgt eine Umstrukturierung: Es wird neuer und größerer Speicherplatz reseriert.


6.14.8   l$sort, l$sortlex()

  Syntax:   'l$sort ( list_var )'
'l$sortlex ( list_var )'

Zuerst wird die Existens und der Typ der Variablen LIST_VAR überprüft, wobei natürlich auch indizierte Variablen erlaubt sind. Existiert diese nicht oder handelt es sich nicht um eine LISTE, dann wird eine leere Liste mit dem angegebenen Variablennamen (und Index) erzeugt.

Anschließend wird die Liste sortiert, so das das kleineste Element vorne (bei Index 0) steht. Für den Vergleich wird 'cmp()' bzw. 'cmplex()' verwendet.

Als Funktionsergebnis wird die Anzahl der Elemente der Liste geliefert.


6.14.9   l$cat()

  Syntax:   'l$cat ( list_var, ????? )'

  --- ??? ---  


6.14.10   l$list()

  Syntax:   'l$list ( list_var, ????? )'

  --- ??? ---  


6.14.11   l$pack()

  Syntax:   'l$pack ( list_var, ????? )'

  --- ??? ---  


6.14.12   l$purge()

  Syntax:   'l$purge ( list_var, ????? )'

  --- ??? ---  


6.14.13   l$setlength()

  Syntax:   'l$setlength ( list_var, ????? )'

  --- ??? ---  


6.14.14   l$setsize()

  Syntax:   'l$setsize ( list_var, ????? )'

  --- ??? ---  


6.14.15   list2()

  Syntax:   'list2 ( ????? )'

  --- ??? ---  


6.14.16   flatlist()

  Syntax:   'flatlist ( ????? )'

  --- ??? ---  


6.14.17   flatlistnum()

  Syntax:   'flatlistnum ( ????? )'

  --- ??? ---  


6.14.18   catlist()

  Syntax:   'catlist ( ????? )'

  --- ??? ---  


6.14.19   vector()

  Syntax:   'vector ( ????? )'

  --- ??? ---  


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.15   Maps

  --- ??? ---  




6.15.1   m$cat()

  Syntax:   'm$cat ( ????? )'

  --- ??? ---  


6.15.2   m$clear()

  Syntax:   'm$clear ( ????? )'

  --- ??? ---  


6.15.3   m$exist()

  Syntax:   'm$exist ( ????? )'

  --- ??? ---  


6.15.4   m$insert()

  Syntax:   'm$insert ( ????? )'

  --- ??? ---  


6.15.5   m$insertmap()

  Syntax:   'm$insertmap ( ????? )'

  --- ??? ---  


6.15.6   m$keys()

  Syntax:   'm$keys ( ????? )'

  --- ??? ---  


6.15.7   m$keys()

  Syntax:   'm$keys ( ????? )'

  --- ??? ---  


6.15.8   m$keys()

  Syntax:   'm$keys ( ????? )'

  --- ??? ---  


6.15.9   m$keys()

  Syntax:   'm$keys ( ????? )'

  --- ??? ---  


6.15.10   m$keys()

  Syntax:   'm$keys ( ????? )'

  --- ??? ---  


6.15.11   m$length()

  Syntax:   'm$length ( ????? )'

  --- ??? ---  


6.15.12   m$map()

  Syntax:   'm$map ( ????? )'

  --- ??? ---  


6.15.13   m$maskmap()

  Syntax:   'm$maskmap ( ????? )'

  --- ??? ---  


6.15.14   m$oncemap()

  Syntax:   'm$oncemap ( ????? )'

  --- ??? ---  


6.15.15   m$pack()

  Syntax:   'm$pack ( ????? )'

  --- ??? ---  


6.15.16   m$purge()

  Syntax:   'm$purge ( ????? )'

  --- ??? ---  


6.15.17   m$remove()

  Syntax:   'm$remove ( ????? )'

  --- ??? ---  


6.15.18   m$removemap()

  Syntax:   'm$removemap ( ????? )'

  --- ??? ---  


6.15.19   m$replace()

  Syntax:   'm$replace ( ????? )'

  --- ??? ---  


6.15.20   m$replacemap()

  Syntax:   'm$replacemap ( ????? )'

  --- ??? ---  


6.15.21   m$size()

  Syntax:   'm$size ( ????? )'

  --- ??? ---  


6.15.22   m$store()

  Syntax:   'm$store ( ????? )'

  --- ??? ---  


6.15.23   m$storemap()

  Syntax:   'm$storemap ( ????? )'

  --- ??? ---  


6.15.24   catmap()

  Syntax:   'catmap ( ????? )'

  --- ??? ---  


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.16   Farben

6.16.1   Farbformate

Die folgenden Farbfunktionen 'color()', 'colorscheme()', 'red()', 'green()' und 'blue()' erwarten als Parameter 'COLOR' eine Farbangabe. Je nach Typ und Wert wird diese Farbangabe wie folgt interpretiert:

  • NUMBER (Zahl)

    Der Wert wird mittels 'int32()' in eine Ganzzahl gewandelt. Ist nun das Bit '_COLORSCHEME' (Bit 28) gesetzt, handelt es sich bei der Angabe um ein Farbschema. Andernfalls handelt es sich um eine konkrete Farbangabe im RGB Format.

    Farbangaben im RGB Format enthalten je 8 Bit (Werte 0 bis 255 bzw. 0x00 bis 0xff) für jeden der Farbanteile rot (Bits 16-23), grün (Bits 8-15) und blau (Bits 0-8). Symbolisch wird dieses häufig als '#rrggbb' oder '0xrrggbb' ausgedrückt, wobei rr, gg und bb jeweils eine zweistellige Hexadezimalzahl sind.

    Farbschemata werden als Zeiger in eine Tabelle interpretiert. Für jedes Farbschema sind 12 Farben definiert und 12 weitere Zwischenfarben werden berechnet:

    • hellen Hintergründe '_bg_l1' ... '_bg_l9'

      In der angegebenen Farbe werden neun helle Hintergründe definiert, wobei die Werte für '_bg_l1', '_bg_l5' und '_bg_l9' aus der Tabelle entnommen werden und die anderen Werte als Zwischenwerte berechnet werden.

    • dunklen Hintergründe '_bg_d1' ... '_bg_d9'

      In der angegebenen Farbe werden neun dunkle Hintergründe definiert, wobei die Werte für '_bg_d1', '_bg_d5' und '_bg_d9' aus der Tabelle entnommen werden und die anderen Werte als Zwischenwerte berechnet werden.

    • hellen Schriftfarben '_font_l1' ... '_font_l3'

      Für die dunklen Hintergründe sind drei helle Schriftfarben definiert. Es handelt sich dabei um die Farben weiß ('_font_l1'), gelb ('_font_l2') und hellblau ('_font_l3'). Die genauen Farbwerte wurden für jedes Farbschema so ausgewählt, dass sie einen möglichst großen Kontrast zu den dunklen Hintergrundfarben bilden.

    • dunklen Schriftfarben '_font_d1' ... '_font_d3'

      Für die hellen Hintergründe sind drei dunkle Schriftfarben definiert. Es handelt sich dabei um die Farben schwarz ('_font_d1'), blau ('_font_d2') und rot ('_font_d3'). Die genauen Farbwerte wurden für jedes Farbschema so ausgewählt, dass sie einen möglichst großen Kontrast zu den dunklen Hintergrundfarben bilden.

    Es existieren auch Tabellen mit der Darstellung aller Farbschemata und genauer Angabe aller Farbwerte.

    Soll aus einem Farbschema ein Farbwert ermittelt werden, wurde aber kein Index ('_bg_*' bzw. '_font_*') angegeben, dann wird '_bg_l9' als Voreinstellung verwendet.

  • STRING (Zeichenkette)

    Führende Leerzeichen im Text werden ignoriert.

    Beginnt der Text mit einer Ziffer oder dem Zeichen '#', dann wird angenommen, dass es sich um eine als Text dargestellte Hexadezimalzahl handelt, die einen Farbwert im RGB Format enthält.

    Beginnt der Text mit eine Klammer '(', dann wird davon ausgegangen, dass eine Farbangabe im Format '(rot,grün,blau)' vorliegt, wobei die drei Zahlen aus dem Bereich 0 bis 255 stammen.

    Beginnt die Zeichenkette mit einem Buchstaben, dann wird angenommen, dass es sich um einen deutsch- oder englischsprachigen Farbnamen handelt. Dieser Farbname wird dann je nach Anforderung in eine Farbe oder Farbschema gewandelt. Die möglichen Farbnamen sind der folgenden Tabelle aufgelistet.

     Farbname   Schema   Farbe 
     black   _blackwhite   #000000       
     blau   _blue   #0000ff       
     blaulila   _bluemagenta   #a000ff       
     blautürkis   _cyanblue   #00a0ff       
     blue   _blue   #0000ff       
     bluecyan   _cyanblue   #00a0ff       
     bluemagenta   _bluemagenta   #a000ff       
     braun   _orange   #c06030       
     bronze   _grey   #d8b080       
     brown   _orange   #c06030       
     cyan   _cyan   #00ffff       
     cyanblue   _cyanblue   #00a0ff       
     cyangreen   _greencyan   #00ffa0       
     darkgray   _grey   #404040       
     darkgrey   _grey   #404040       
     dunkelgrau   _grey   #404040       
     gelb   _yellow   #ffff00       
     gelbgrün   _yellowgreen   #c0ff2f       
     gelborange   _orangeyellow   #ffd000       
     gold   _orange   #ffd700       
     grau   _grey   #808080       
     gray   _grey   #808080       
     green   _green   #00ff00       
     greencyan   _greencyan   #00ffa0       
     greenyellow   _yellowgreen   #c0ff2f       
     grey   _grey   #808080       
     grün   _green   #00ff00       
     grüngelb   _yellowgreen   #c0ff2f       
     grüntürkis   _greencyan   #00ffa0       
     hellgrau   _grey   #c0c0c0       
     lightgray   _grey   #c0c0c0       
     lightgrey   _grey   #c0c0c0       
     lila   _magenta   #ff00ff       
     lilablau   _bluemagenta   #a000ff       
     lilarot   _magentared   #ff00a0       
     magenta   _magenta   #ff00ff       
     magentablue   _bluemagenta   #a000ff       
     magentared   _magentared   #ff00a0       
     orange   _orange   #ffa000       
     orangegelb   _orangeyellow   #ffd000       
     orangered   _redorange   #ff5500       
     orangerot   _redorange   #ff5500       
     orangeyellow   _orangeyellow   #ffd000       
     red   _red   #ff0000       
     redmagenta   _magentared   #ff00a0       
     redorange   _redorange   #ff5500       
     rot   _red   #ff0000       
     rotlila   _magentared   #ff00a0       
     rotorange   _redorange   #ff5500       
     schwarz   _blackwhite   #000000       
     silber   _grey   #c0c0c0       
     silver   _grey   #c0c0c0       
     türkis   _cyan   #00ffff       
     türkisblau   _cyanblue   #00a0ff       
     türkisgrün   _greencyan   #00ffa0       
     weiss   _blackwhite   #ffffff       
     weiß   _blackwhite   #ffffff       
     white   _blackwhite   #ffffff       
     yellow   _yellow   #ffff00       
     yellowgreen   _yellowgreen   #c0ff2f       
     yelloworange   _orangeyellow   #ffd000       

    Anmerkungen: Anstatt des Umlautes 'ü' bzw. des 'ß' kann auch 'ue' bzw. 'ss' verwendet werden. Klein-/Großschreibung spielt keine Rolle.


6.16.2   color()

  Syntax:   'color ( color )'
'color ( scheme, index )'

Der erste Parameter ist eine Farbangabe, wie sie unter Farbformate beschrieben ist. Bei Angabe von einem Parameter 'COLOR' wird dieser in einen 32 Bit Farbwert gewandelt. Bei Angabe von zwei Parametern wird aus dem Farbschema 'SCHEME' die Farbe mit dem angebenen 'INDEX' gewählt.


6.16.3   colorscheme()

  Syntax:   'colorscheme ( scheme )'

Der Parameter 'SCHEME' wird als Farbschema ausgewertet, wie sie unter Farbformate beschrieben ist. Als Ergebnis wird ein INT32 für ein Farbschema geliefert, wobei Bit '_COLORSCHEME' (Bit 28) ist immer gesetzt ist,


6.16.4   red(), green(), blue()

  Syntax:   'red ( color )'
'green ( color )'
'blue ( color )'

Der Parameter 'COLOR' ist eine Farbangabe, wie sie unter Farbformate beschrieben ist. Als Ergebnis wird der Rot-, Grün- oder Blauanteil der Farbe geliefert. Das Ergebnis ist immer ein INT32 Wert aus dem Wertebereich 0 bis 255.


6.16.5   rgb()

  Syntax:   'rgb ( red, green, blue )'

Es wird eine Farbe aus den drei Komponenten 'RED', 'GREEN' und 'BLUE' zusammengesetzt. Hierzu wird jede Komponete in eine Ganzzahl gewandelt, wobei nur die niederwertigten 8 Bit verwendet wird. Als Ergebnis wird eine INT32 Zahl geliefert.


6.16.6   mixcolor()

  Syntax:   'mixcolor ( color1, color2 )'
'mixcolor ( color1, color2, weight_1000 )'

Die beiden Parameter 'COLOR1' und 'COLOR2' sind Farbangaben, wie sie unter Farbformate beschrieben ist.

Es wird eine Mischfarbe aus den beiden Farben berechnet. Dazu werden die beiden Farben in die drei Komponenten zerlegt, die Mischfarbe eine jeder Komponente berechnet und die Komponenten wieder zu einer Farbe zusammengesetzt. Bei der Berechnung werden Komponentenwerte <0 bzw. >255 werden auf 0 bzw. 255 gesetzt.

Für jede komponente wird die folgende Formel verwendet:

  • Ergebnis := ( COLOR2 - COLOR1 ) * WEIGHT / 1000 + COLOR1

'WEIGHT_1000' gibt dabei das Mischungsverhältnis an. Bei '0' wird die Farbe 'COLOR1' verwendet, Bei '1000' wird die Farbe 'COLOR2' verwendet und bei '500' eine 1:1 Mischung beider Farben. Es sind alle möglichen Werte zuläßig, auch Werte <0 oder >1000.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.17   Zugriff auf Dateien

6.17.1   filename()

  Syntax:   'filename ( F1, F2, ..., FN )'
'filename ( flags, F1, F2, ..., FN )'

Die Dateinamen 'F1' bis 'FN' werden miteinander verknüpft. Ist der erste Parameter ein Zahl, dann wird er als 'FLAGS' interpretiert.

  --- ??? ---  

Als Ergebnis wird der neue Dateiname geliefert.

(siehe auch Funkton 'printfilename()').


6.17.2   minimize()

  Syntax:   'minimize ( filename, base )'

Es wird versucht, den Dateienamen 'FILENAME' relativ zu 'BASE' zu minimieren. Diese Funktion ist nur sinnvoll, wenn beide Parameter vollständige Dateinamen sind.

  --- ??? ---  

Als Ergebnis wird der minimierte Dateiname geliefert. Dieser minimierte Dateiname kann durch die Funktion 'filename(ergebnis,base)' wieder zu einem vollständigen Dateinamen zusammengesetzt werden.

(siehe auch Funkton 'relative()').


6.17.3   relative()

  Syntax:   'relative ( filename, base )'

Es wird versucht, den Dateienamen 'FILENAME' relativ zu 'BASE' zu minimieren. Diese Funktion ist nur sinnvoll, wenn beide Parameter vollständige Dateinamen sind.

  --- ??? ---  

Als Ergebnis wird der minimierte Dateiname geliefert. Dieser minimierte Dateiname kann durch die Funktion 'filename(ergebnis,base)' wieder zu einem vollständigen Dateinamen zusammengesetzt werden.

(siehe auch Funkton 'minimize()').


6.17.4   printfilename()

  Syntax:   'printfilename ( filename, format )'
'printfilename ( filename, format, system )'
'printfilename ( filename, format, system, i_num )'
'printfilename ( filename, format, system, i_num, j_num )'
'printfilename ( filename, format, system, i_num, j_num, escape_char )'

Mit ESCAPE_CHAR wird das Zeichen angegeben, welches im Formatstring die Steuersequenzen einleitet. Ohne Angabe (oder falls 0) wird '%' verwendet.

  --- ??? ---  

Als Ergebnis wird der neue Dateiname geliefert.

(siehe auch Funkton 'filename()').


6.17.5   fileinfo()

  Syntax:   'fileinfo ( ????? )'

  --- ??? ---  


6.17.6   fileattrib()

  Syntax:   'fileattrib ( filename )'

Das Attribut der angegebenen Datei wird geliefert. Existiert keine solche Datei oder kein solches Verzeichnis, dann ist das Ergebnis NONE.


6.17.7   filetype()

  Syntax:   'filetype ( filename )'

  --- ??? ---  


6.17.8   filesize()

  Syntax:   'filesize ( filename )'

Die Größe in Bytes der angegebenen Datei wird als INT64 geliefert.

Existiert keine solche Datei oder kein solches Verzeichnis, dann ist das Ergebnis NONE.


6.17.9   filetime()

  Syntax:   'filetime ( filename )'

Der Zeitpunkt der letzen Modifikation der Datei wird als INT64 geliefert. Existiert keine solche Datei oder kein solches Verzeichnis, dann ist das Ergebnis NONE.


6.17.10   findFile()

  Syntax:   'findFile ( pattern, search_list, filetype )'

  --- ??? ---  


6.17.11   findFiles()

  Syntax:   'findFiles ( options_and_pattern )'
'findFiles ( options_and_pattern, filename_base )'

  --- ??? ---  


6.17.12   copyFile()

  Syntax:   'copyFile ( ????? )'

  --- ??? ---  


6.17.13   copyFiles()

  Syntax:   'copyFiles ( ????? )'

  --- ??? ---  


6.17.14   moveFile()

  Syntax:   'moveFile ( ????? )'

  --- ??? ---  


6.17.15   moveFiles()

  Syntax:   'moveFiles ( ????? )'

  --- ??? ---  


6.17.16   linkFile()

  Syntax:   'linkFile ( ????? )'

  --- ??? ---  


6.17.17   linkFiles()

  Syntax:   'linkFiles ( ????? )'

  --- ??? ---  


6.17.18   deleteFile()

  Syntax:   'deleteFile ( ????? )'

  --- ??? ---  


6.17.19   deleteFiles()

  Syntax:   'deleteFiles ( ????? )'

  --- ??? ---  


6.17.20   fileAccessMode()

  Syntax:   'fileAccessMode ( ????? )'

  --- ??? ---  


6.17.21   inclAccessMode()

  Syntax:   'inclAccessMode ( ????? )'

  --- ??? ---  


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.18   Konstanten

6.18.1   none()

  Syntax:   'none ( )'

Es wird die Konstante vom Typ NONE (undefiniert) als Ergebnis geliefert. Als Alternative kann auch die vordefierte Konstante '@NONE' verwendet werden.


6.18.2   e()

  Syntax:   'e ( )'

Es wird die Konstante E (~ 2.7182818284590452354) als Ergebnis geliefert. Neben der Funktion ist auch die Variable 'E' definiert.


6.18.3   pi()

  Syntax:   'pi ( )'

Es wird die Konstante PI (~ 3.14159265358979323846) als Ergebnis geliefert. Neben der Funktion ist auch die Variable 'PI' definiert.


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.19   Vergleiche

6.19.1   cmp()

  Syntax:   'cmp ( x1, x2 )'

Die beiden Parameter X1 und X2 werden miteinander verglichen. Sind beide Parmeter eine Zeichenkette, dann erfolgt ein Textvergleich. Sind beide Parmeter eine Zahl (INT32, INT64 oder FLOAT), dann erfolgt ein Zahlenvergleich.

Andernfalls werde die Typen der Operanden (siehe Funktion 'type()') miteinander verglichen. Bei einem Typenvergleich gilt per Definition: NONE (undefiniert) < NUMBER (Zahl) < STRING (Zeichenkette)

Der Vergleich wird im Detail wie folgt durchgeführt:

  1. Sind beide Operanden vom Typ NONE (undefiniert), dann wird '0' (Gleichheit) als Ergebnis geliefert.

  2. Andernfalls: Ist einer der Operanden vom Typ NONE (undefiniert), dann wird ein Typvergleich durchgeführt. Ist der erste Operanden vom Typ NONE (undefiniert), dann wird '-3' als Ergebnis geliefert, andernfalls '+3'.

  3. Andernfalls: Sind beide Operanden vom Typ STRING (Zeichenkette), dann werden die Zeichenketten zeichenweise miteinander verglichen. Sind beide Zeichenketten identisch, wird '0' als Ergebnis geliefert. Sonst wird der ASCII Wert der ersten unterschiedliche Zeichen wird verglichen. Ist X1 < X2, dann wird '-1' als Ergebnis geliefert. Ist X1 > X2, dann wird '+1' als Ergebnis geliefert.

    Für einen lexikalischen Vergleich zweier Zeichenketten sollte die Funktion 'cmplex()' verwendet werden.

  4. Andernfalls: Ist einer der Operanden vom Typ STRING (Zeichenkette), dann wird ein Typvergleich durchgeführt. Ist der erste Operanden vom Typ STRING (Zeichenkette), dann wird '+3' als Ergebnis geliefert, andernfalls '-3'.

  5. In allen anderen Fällen handelt es sich um einen Zahlenvergleich. Ist einer der beiden Operanden vom Typ FLOAT (Fließkommazahl), dann wird der andere auch in FLOAT (Fließkommazahl) gewandelt. Ist andernfalls einer der beiden Operanden vom Typ INT64 (Ganzzahl/64 Bit), dann wird der andere auch in INT64 (Ganzzahl/64 Bit) gewandelt. Andernfalls sind beide Operanden vom Typ INT32 (Ganzzahl/32 Bit).

    Die ggf. umgeformten Operanden werden nun verglichen:

    • Ist X1 < X2, dann wird '-1' als Ergebnis geliefert.
    • Ist X1 == X2, dann wird ' 0' als Ergebnis geliefert.
    • Ist X1 > X2, dann wird '+1' als Ergebnis geliefert.

Es wird also eines von fünf möglichen Resultaten geliefert:

  • '-3'
    Die Inhalte der beiden Operanden konnte nicht verglichen werden. Stattdessen wurden die Typen verglichen, wobei gilt: 'type(x1)' < 'type(x2)'.

  • '-1'
    Es gilt: x1 < x2 .

  • '0'
    Die Inhalte beider Operanden ist identisch.

  • '+1'
    Es gilt: x1 > x2 .

  • '+3'
    Die Inhalte der beiden Operanden konnte nicht verglichen werden. Stattdessen wurden die Typen verglichen, wobei gilt: 'type(x1)' > 'type(x2)'.


6.19.2   cmplex()

  Syntax:   'cmplex ( x1, x2 )'

Diese Funktion liefert die gleichen Ergebnisse wie 'cmp()' mit Ausnahme eines Vergleiches zweier Zeichenketten. Dieser werden mit 'cmplex()' lexikalisch anstatt nur nach den Werten der einzelnen Zeichen vorgenommen.

An dieser Stelle wird daher nur der Vergleich zweier Zeichenketten beschrieben. Für Vergleiche mit anderen Typen bitte bei 'cmp()'nachsehen.

Der Vergleich wird intern im Detail wie folgt durchgeführt:

  1. Für beide Zeichenketten werden temporäre Arbeitsbereiche bereitgestellt. Dieses sind '1.1 * len' oder 50.000 Zeichen lang, was immer größer ist.

  2. Beide Zeichenketten werden mittels 'sortstring()' gewandelt, wobei die Ergebnisse in die temporären Buffer geschrieben werden. Diese Umwandlungen werden 'sort1' und 'sort2' genannt.

  3. Die temporären Buffer werden verglichen: Sollte 'sort1<sort2' sein, dann wird als Ergebnis '-2' geliefert. Sollte 'sort1>sort2' sein, dann wird als Ergebnis '+2' geliefert. Andernfalls wird mit dem nächsten Punkt weitergemacht.

  4. Die original Zeichenketten werden verglichen. Sollte 'x1<x2' sein, dann wird als Ergebnis '-1' geliefert. Sollte 'x1>x2' sein, dann wird als Ergebnis '+1' geliefert. Andernfalls sind beide Zeichenbketen identisch und es wird '0' als Ergebnis geliefert.

Es wird also eines von sieben möglichen Resultaten geliefert:

  • '-3'
    Die Inhalte der beiden Operanden konnte nicht verglichen werden. Stattdessen wurden die Typen verglichen, wobei gilt: 'type(x1)' < 'type(x2)'.

  • '-2'
    Beim Vergleich zweier Zeichenketten gilt nach der Umwandlung mittels 'sortstring()' x1 < x2 .

  • '-1'
    Die Umwandlung mittels 'sortstring()' der beiden Operanden lieferte ein identisches Ergebnis und es gilt: x1 < x2 .

  • '0'
    Die Inhalte beider Operanden ist identisch.

  • '+1'
    Die Umwandlung mittels 'sortstring()' der beiden Operanden lieferte ein identisches Ergebnis und es gilt: x1 > x2 .

  • '+2'
    Beim Vergleich zweier Zeichenketten gilt nach der Umwandlung mittels 'sortstring()' x1 > x2 .

  • '+3'
    Die Inhalte der beiden Operanden konnte nicht verglichen werden. Stattdessen wurden die Typen verglichen, wobei gilt: 'type(x1)' > 'type(x2)'.


6.19.3   test(), testdef()

  Syntax:   'test ( num, bool )'
'testdef ( num, bool )'

'test()' und 'testdef()' liefern als Ergebnis '1' für WAHR oder '0' für FALSCH. Zuerst wird der numerische Ausdruck X ausgewertet, wobei nur das Vorzeichen eine Rolle spielt. Der zweite Ausdruck BOOL wird auf WAHR oder FALSCH getestet. Es werden die folgenden Ergebnisse geliefert:

  NUM < 0:  Ergebnis --> BOOL (0 oder 1)
  NUM = 0:  Ergebnis --> WAHR (1)
  NUM > 0:  Ergebnis --> not BOOL (1 oder 0)
'test()' erwartet als zweiten Paremeter einen numerischen Ausdruck und 'testdef()' einen <Variablen.Ausdruck>.


6.19.4   index()

  Syntax:   'index ( index, max )'

Als Ergebnis wird ein Index geliefert, der nach den folgenden Regeln normiert wird:

  • Falls 'INDEX < 0' dann 'INDEX := INDEX + MAX'
    Damit kann eine Position relativ zu MAX angegeben werden.
  • Falls immer noch 'INDEX < 0' dann 'INDEX := 0'
  • Falls 'INDEX > MAX' dann 'INDEX := MAX'


page up top page
up top
previous page top next page top
previous page bottom next page bottom
down bottom

6.20   sonstige Funktionen

6.20.1   move()

  Syntax:   'move ( ????? )'

  --- ??? ---  


6.20.2   key()

  Syntax:   'key ( )'
'key ( wait )'
'key ( wait, default )'

Es wird ein Tastaturkode von der Tastatur eingelesen. Dabei wird maximal WAIT Millisekunden auf die Eingabe gewartet, wobei bei WAIT<0 unendlich gewartet wird. Ist WAIT undefiniert, dann wird nicht gewartet. Wurde keine Tastatureingabe vorgenommen, dann wird der Wert DEFAULT, ersatzweise 0, als Ergebnis geliefert.

Tastatureingaben werden zwischengespeichert, so dass beim Ausführen von 'key()' bereits eine Tastatureingabe vorliegen kann.

Werte zwischen 1 und 255 repräsentieren ASCII-Zeichen, Werte >255 Sondertasten.

  --- ??? ---  


6.20.3   uniqueid()

  Syntax:   'uniqueid()'

Diese Funktion liefert bei ihrem ersten Aufruf den Wert 1 und bei jedem weiteren Aufruf einen um 1 erhöhten Wert. Damit können eindeutige Werte erzeugt werden.


6.20.4   calc(), check(), info(), exist(), extern()

  Syntax:   'calc ( ... )'
'check ( ... )'
'info ( ... )'
'exist ( ... )'
'extern ( ... )'

Durch diese Funktionen können zusätzliche programmspezifische Funktionen implementiert werden. Typischerweise beschreibt der erste Parameter den Namen der externen Funktion und die weiteren Parmeter werden der externen Funktion übergeben.

Es handelt sich hierbei um eine veralterte Erweiterung.



page up top page
up top
previous page top next page top
previous page bottom next page bottom

  Seite 1    Seite 2    Seite 3 

Diese Seite wurde mit MakeDoc V3.22a erzeugt.

18xx/PC V2.22g - © Dirk Clemens - 2004-05-07
dc@18xx.de