Datentypen

Lobster_data kennt folgende Datentypen (für Felder, Variablen und Funktionsparameter).


String

Texte (alphanumerisch).

Integer

Ganzzahlen ohne Nachkommastellen im Bereich -2147483648 bis 2147483647.

BigInteger

Ganzzahlen, die den Integer-Bereich überschreiten.

Float

Gleitpunktwerte mit geringer relativer Genauigkeit (7 signifikante Stellen).

Double

Gleitpunktwerte mit großer relativer Genauigkeit (15 signifikante Stellen).

BigDecimal

Dezimalzahlen ohne Rundungsfehler, speziell für den kaufmännischen Bereich.

Boolean

Logische Werte (true oder false), also speziell für logische Bedingungen. Hinweis: Es findet in Eingabefeldern eine implizite Typumwandlung statt. Ein String, der mit t beginnt oder eine Zahl > 0 werden zu true umgewandelt (das beinhaltet auch Zahlen mit führender 0, z. B. 012, die vor der impliziten Typumwandlung eigentlich Strings sind). Ein String, der nicht mit t beginnt oder eine Zahl <= 0 werden zu false umgewandelt.

Date

Datumsangaben (ohne Zeit).

Timestamp

Datum- und Zeitangaben.

Blob

Binärdaten.


Um dem Anwender die Arbeit zu erleichtern, gibt es implizite, d. h. stillschweigende, Typumwandlungen. In vielen Fällen muss der Anwender den Datentyp deshalb gar nicht beachten. Jeder Datentyp kann implizit in einen Text (String) gewandelt werden. Ein Date-Wert, der z. B. den 7. Mai 2011 repräsentiert, wird als 2011-05-07 gewandelt, ein Boolean-Wert, der "wahr" bedeutet, wird als true dargestellt. Umgekehrt kann ein Text im Format dieser nativen Darstellung eines anderen Datentyps auch implizit in diesen Zieltyp gewandelt werden. So kann ein String, der einen Zahlenwert darstellt, in einen numerischen Wert gewandelt werden. Der Dezimal-Trenner ist dabei das Zeichen . (Punkt) in der Textdarstellung.

Um auch Formate, die von der nativen Darstellung abweichen, zu unterstützen gibt es mehrere Möglichkeiten.

Beim Parsen einer Eingangsdatei in die Felder eines Profil-Eingangsbaumes kann man zu jedem Feld eine Format-Vorlage (Template) als Eigenschaft des Feldes definieren. Ein Eingangsfeld vom Typ Date mit der Vorlage yyyyMMdd würde dann den Text 20110507 als 7. Mai 2011 verstehen. Templates können ebenfalls den Feldern des Zielbaumes zugeordnet werden, um die Wandlung des Feldwertes in die Textdarstellung beeinflussen zu können.

Zusätzlich gibt es spezielle Funktionen, die eine explizite Typumwandlung ermöglichen, z. B. die "create date"–Varianten zur Wandlung eines String in einen Date- oder Timestamp-Wert mithilfe einer Formatvorlage (Template), sowie die Funktion format date/timestamp to text(a, template b, [Locale c], [Timezone d]) für die umgekehrte Richtung.

Wichtiger Hinweis: Jede implizite Typumwandlung kann mit einer Veränderung des Wertes zusammenhängen. Bei Wandlung eines Gleitpunktwertes in eine Ganzzahl (Integer oder BigInteger) gehen beispielsweise die Nachkommastellen verloren. Die Wandlung des Strings abc in eine Ganzzahl liefert den Zahlenwert 0 und die Wandlung des gleichen Strings in einen Boolean liefert den Wert false. Die anschließende Rückwandlung in einen String stellt nicht wieder den Wert abc her.

Implizite Wandlungen erzeugen bei Formatfehlern niemals einen Abbruch des Jobs, sondern nehmen stattdessen den Defaultwert des Zieltyps an. Das ist bei numerischen Zieltypen der Wert 0 bzw. 0.0, bei Boolean der Wert false und bei Date/Timestamp der aktuelle Zeitpunkt.

Bei expliziter Wandlung durch eine Funktion kann gegebenenfalls eine spezielle Fehlerbehandlung definiert werden, wie z. B. bei den Funktionen create date strict(…).

Funktionen erwarten einen bestimmten Datentyp und liefern ein Ergebnis in einem bestimmten Typ

Die oben erwähnte Funktion format date/timestamp to text(a, template b, [Locale c], [Timezone d]) erwartet ein Date oder einen Timestamp und erzeugt einen String. Alle numerischen Vergleiche (<, >, <= usw.) erwarten zwei numerische Werte und erzeugen einen Boolean. Die Rechen-Operationen aus der Funktionsgruppe Math Functions erwarten numerische Werte und erzeugen ein numerisches Ergebnis. Die Funktion goto function-pos(a==true, b, c) erwartet für Parameter a einen logischen Wert (Boolean) usw.

Wenn einer Funktion ein Wert übergeben wird, der nicht dem erwarteten Typ entspricht, dann wird er implizit in den erwarteten Typ gewandelt. Dabei wird bei einem Formatfehler der Defaultwert des erwarteten Typs angenommen. Deshalb wird bei dem Versuch, mit Funktion a + b die Strings abc und 12.7 zu addieren, der String abc in den Zahlenwert 0 gewandelt. Der andere Parameter wird in einen Double mit dem Wert 12,7 gewandelt. Ergebnis ist ein Double mit dem Wert 12,7.

Variablen haben einen Typ

Der Typ einer Variablen wird bei Definition festgelegt. Eine Variable kann nur Werte dieses Typs speichern. Weist man der Variablen mit save variable a(b) type-safe einen Wert eines anderen Typs zu, wird eine Typumwandlung ausgeführt. Als Ergebniswert liefert diese Funktion den zugewiesenen Wert im jeweiligen Typ der Variablen.

Vergleiche und Typ

Bei Vergleichen durch die Funktionen a equals b, logical-not( a equal b ), a == b ? c : d, sowie goto filter-pos(a==b, c, d)) können je nach Datentypen der Vergleichsargumente a und b drei verschiedene Vergleichsarten ausgeführt werden.


  • Wenn beide Vergleichsargumente vom Typ String sind, wird ein String-Vergleich ausgeführt.

  • Wenn mindestens ein Vergleichsargument vom Typ Boolean ist, wird ein Boolean-Vergleich ausgeführt.

  • In allen anderen Fällen wird ein numerischer Vergleich auf der Basis des Typs BigDecimal ausgeführt.


Im zweiten Fall wird gegebenenfalls das Argument, das kein Boolean ist, in einen Boolean gewandelt. Im dritten Fall werden gegebenenfalls beide Argumente in einen BigDecimal gewandelt.

Um beispielsweise mit Funktion a equals b zu prüfen, ob der Wert aus einem String-Feld numerisch der Ganzzahl 2 entspricht, darf kein String-Vergleich ausgeführt werden, denn der Wert kann 2, 002, 2.0 oder 0.2E1 dargestellt sein.

Um einen numerischen Vergleich zu erzwingen, muss mindestens eins der Argumente einen numerischen Typ haben. Die Typumwandlung kann wahlweise durch vorherige Zuweisung des Wertes zu einer numerischen Variablen, z. B. Typ Integer, durch save variable a(b) type-safe erfolgen oder durch explizite Typumwandlung mit der Funktion convert-type( value a, type b, mask c ).

Siehe auch


Abschnitt Datenstrukturen in Lobster_data.