Konstanten können überall in Natural-Programmen benutzt werden. Dieses Dokument behandelt die Arten von Konstanten, die unterstützt werden, und erläutert wie sie benutzt werden.
Dieser Abschnitt behandelt folgende Themen:
Folgende Themen werden behandelt:
Eine numerische Konstante kann 1 bis 29 numerische Ziffern, ein Sonderzeichen als Dezimalzeichen (Komma oder Punkt) und ein Vorzeichen enthalten.
Beispiele:
1234 +1234 -1234 12.34 +12.34 -12.34
MOVE 3 TO #XYZ COMPUTE #PRICE = 23.34 COMPUTE #XYZ = -103 COMPUTE #A = #B * 6074
Intern werden numerische Konstanten in gepackter Form (Format P) dargestellt. Ausnahme: Wenn eine numerische Konstante in einer arithmetischen Operation benutzt wird, in der der andere Operand eine Ganzzahl-Variable (Format I) ist, wird die numerische Konstante in Ganzzahl-Form (Format I) dargestellt.
Wenn eine numerische Konstante innerhalb eines der Statements COMPUTE, MOVE oder DEFINE DATA mit der INIT-Option benutzt werden,
überprüft Natural zur Kompilierungszeit, ob ein Konstanten-Wert in das entsprechende
Feld passt. Dadurch werden Laufzeitfehler in Situationen vermieden, in denen eine solche
Fehlerbedingung bereits bei der Kompilierung entdeckt werden kann.
Folgende Themen werden behandelt:
Eine alphanumerische Konstante kann 1 bis 1.073.741.824 Bytes (1 GB) alphanumerische Zeichen enthalten. Eine alphanumerische
Eine alphanumerische Konstante muss entweder in Apostrophen (')
'text'
oder Anführungszeichen (") stehen.
"text"
Beispiele:
MOVE 'ABC' TO #FIELDX MOVE '% INCREASE' TO #TITLE DISPLAY "LAST-NAME" NAME
Anmerkung
Eine alphanumerische Konstante, die zur Zuweisung eines Wertes zu einer Benutzervariable verwendet wird, darf nicht auf
mehrere Statement-Zeilen aufgeteilt werden.
Möchten Sie, dass ein Apostroph (') Teil einer in Apostrophen stehenden alphanumerischen Konstante wird, müssen Sie dies durch 2 Apostrophen (' ') oder ein einzelnes Anführungszeichen ('') ausdrücken.
Möchten Sie, dass ein Apostroph (') Teil einer in Anführungszeichen (") stehenden alphanumerischen Konstante wird, drücken Sie dies durch einen einzelnen Apostroph (') aus.
Beispiel:
Wenn Sie Folgendes ausgeben möchten
HE SAID, 'HELLO'
können Sie eine der folgenden Notationen benutzen:
WRITE 'HE SAID, ''HELLO''' WRITE 'HE SAID, "HELLO"' WRITE "HE SAID, ""HELLO""" WRITE "HE SAID, 'HELLO'"
Anmerkung
Wenn Anführungszeichen nicht in Apostrophen konvertiert werden (siehe oben), dann
ist der Grund dafür die Einstellung des Profilparameters TQ (Anführungszeichen konvertieren). Einzelheiten
dazu erfahren Sie von Ihrem Natural-Administrator.
Alphanumerische Konstanten können mittels eines Bindestrichs miteinander verkettet werden, so dass sie einen einzelnen Wert bilden.
Beispiele:
MOVE 'XXXXXX' - 'YYYYYY' TO #FIELD MOVE "ABC" - 'DEF' TO #FIELD
Auf diese Art können alphanumerische Konstanten auch mit hexadezimalen Konstanten verkettet werden.
Folgende Themen werden behandelt:
Einer Unicode-Textkonstante muss das Zeichen U vorausgehen, und sie muss
entweder in Apostrophen (') stehen
U'text'
oder in Anführungszeichen (''):
U"text"
Beispiel:
U'HELLO'
Der Compiler speichert diese Textkonstante in dem generierten Programm im Unicode-Format (UTF-16).
Wenn Sie möchten, dass ein Apostroph (') Teil einer Unicode-Textkonstante wird, die in Apostrophen steht, müssen Sie dies als zwei Apostrophe (' ') oder als ein einzelnes Anführungszeichen (") kodieren.
Wenn Sie möchten, dass ein Apostroph Teil einer Unicode-Textkonstante wird, die in Anführungszeichen steht, müssen Sie dies als einen einzelnen Apostroph (') kodieren.
Beispiel:
Wenn Sie Folgendes ausgeben möchten
HE SAID, 'HELLO'
können Sie eine der folgenden Notationen benutzen:
WRITE U'HE SAID, ''HELLO''' WRITE U'HE SAID, "HELLO"' WRITE U"HE SAID, ""HELLO""" WRITE U"HE SAID, 'HELLO'"
Anmerkung
Wenn Anführungszeichen nicht in Apostrophe umgesetzt werden (siehe oben), dann liegt
dies an der Einstellung des Profilparameters TQ (Anführungszeichen umsetzen). Einzelheiten
erfahren Sie von Ihrem Natural-Administrator.
Die folgende Syntax wird benutzt, um ein Unicode-Zeichen oder eine Unicode-Zeichenfolge in hexadezimaler Notation anzugeben:
UH'hhhh...'
wobei h eine hexadezimale Ziffer (0-9, A-F) ist.
Da ein UTF-16-Unicode-Zeichen aus einem Doppelbyte besteht, muss die Anzahl der angegebenen hexadezimalen Zeichen ein Mehrfaches von vier sein.
Beispiel:
Dieses Beispiel definiert die Zeichenkette 45.
UH'00340035'
Zur besseren Lesbarkeit können hexadezimale Doppelbytes durch beliebig viele Trennzeichen (Leerzeichen oder Kommas) getrennt werden. Unicode-Hexadezimal-Konstanten werden ohne diese Trennzeichen verarbeitet.
Beispiel:
UH’C1C2,C3C4,C5C6’ oder UH’F1F2F3F4 F5F6F7F8’
Die Verkettung von Unicode-Textkonstanten (U) und Unicode-Hexadezimalkonstanten (UH) ist zulässig.
Gültiges Beispiel:
MOVE U'XXXXXX' - UH'00340035' TO #FIELD
Unicode-Textkonstanten oder Unicode-Hexadezimalkonstanten können nicht mit alphanumerischen Codepage-Konstanten oder H-Konstanten verkettet werden.
Ungültiges Beispiel:
MOVE U'ABC' - 'DEF' TO #FIELD MOVE UH'00340035' - H'414243' TO #FIELD
Weiteres gültiges Beispiel:
DEFINE DATA LOCAL
1 #U10 (U10) /* Unicode variable with 10 (UTF-16) characters,
/* total byte length = 20
1 #UD (U) DYNAMIC /* Unicode variable with dynamic length
END-DEFINE
*
#U10 := U'ABC' /* Constant is created as X'004100420043' in the object,
/* the UTF-16 representation for string 'ABC'.
#U10 := UH'004100420043' /* Constant supplied in hexadecimal format only,
/* corresponds to U'ABC'
#U10 := U'A'-UH'0042'-U'C' /* Constant supplied in mixed formats, corresponds to U'ABC'.
END
Folgende Themen werden behandelt:
Eine Datumskonstante kann in Verbindung mit einer Variablen des Formats D benutzt werden.
Datumskonstanten können folgende Formate haben:
D'yyyy-mm-dd' |
Internationales Datumsformat |
D'dd.mm.yyyy' |
Deutsches Datumsformat |
D'dd/mm/yyyy' |
Europäisches Datumsformat |
D'mm/dd/yyyy' |
USA-Datumsformat |
Dabei bezeichnet dd den Tag,
mm den Monat und
yyyy das Jahr.
Beispiel:
DEFINE DATA LOCAL 1 #DATE (D) END-DEFINE ... MOVE D'2004-03-08' TO #DATE ...
Das standardmäßige Datumsformat wird von dem vom Natural-Administrator gesetzten
Profilparameter DTFORM (Datumsformat) gesteuert.
Eine Zeitkonstante kann in Verbindung mit einer Variablen des Formats T benutzt werden.
Eine Zeitkonstante hat das folgende Format:
T'hh:ii:ss'
Dabei bezeichnet hh Stunden,
ii Minuten und
ss Sekunden.
Beispiel:
DEFINE DATA LOCAL 1 #TIME (T) END-DEFINE ... MOVE T'11:33:00' TO #TIME ...
Eine Zeitvariable (Format T) kann Datums- und Zeit-Informationen enthalten, wobei die
Datumsinformationen eine Untermenge der Zeitinformationen sind. Allerdings können bei
einer "normalen" Zeitkonstante (Präfix T) nur die
Zeit-Informationen einer Zeitvariablen verarbeitet werden:
T'hh:ii:ss'
Bei einer erweiterten Zeitkonstante (Präfix E) ist es möglich, den
vollständigen Inhalt einer Zeitvariablen einschließlich der Datums-Informationen zu
verarbeiten:
E'yyyy-mm-dd hh:ii:ss'
Einmal abgesehen davon ist die Benutzung einer erweiterten Zeitkonstanten in Verbindung mit einer Zeitvariablen identisch mit der für eine normale Zeitkonstante.
Anmerkung
Das Format, in dem Datums-Informationen angegeben werden müssen, ist bei einer
erweiterten Zeitkonstante abhängig von der Einstellung des Profilparameters DTFORM. Bei der oben
angegebenen erweiterten Zeitkonstante wird von DTFORM=I (internationales
Datumsformat) ausgegangen.
Folgende Themen werden behandelt:
Eine hexadezimale Konstante kann benutzt werden, um einen Wert einzugeben, der nicht als ein standardmäßiges Tastaturzeichen eingegeben werden kann.
Eine hexadezimale Konstante kann 1 bis 1.073.741.824 bytes (1 GB) alphanumerische Zeichen enthalten.
Einer hexadezimalen Konstante geht ein Präfix H voraus. Die Konstante
selbst muss in Apostrophen (') stehen und kann aus den hexadezimalen Zeichen 0 - 9, A -
F bestehen. Zwei hexadezimale Zeichen sind erforderlich, um ein Daten-Byte
darzustellen.
Zur besseren Lesbarkeit können hexadezimale Bytes durch beliebig viele Trennzeichen (Leerzeichen oder Kommas) getrennt werden. Hexadezimale Konstanten werden ohne diese Trennzeichen verarbeitet.
Beispiel:
H’C1C2,C3C4,C5C6’ oder H’F1F2 F3F4F5 F6F7’
Die hexadezimale Darstellung eines Zeichens variiert, je nachdem, ob Ihr Computer einen ASCII- oder EBCDIC-Zeichensatz verwendet. Wenn Sie hexadezimale Konstanten auf einen anderen Computer übertragen, müssen Sie deshalb vielleicht die Zeichen konvertieren.
ASCII-Beispiele:
H'313233' (equivalent to the alphanumeric constant '123') H'414243' (equivalent to the alphanumeric constant 'ABC')
EBCDIC-Beispiele:
H'F1F2F3' (equivalent to the alphanumeric constant '123') H'C1C2C3' (equivalent to the alphanumeric constant 'ABC')
Wenn eine hexadezimale Konstante in ein anderes Feld übertragen wird, wird sie als ein alphanumerischer Wert behandelt (Format A).
Die Datenübertragung eines alphanumerischen Werts (Format A) in ein Feld, das nicht in
einem der Formate A, U oder B definiert ist, ist nicht zulässig. Deshalb wird eine
hexadezimale Konstante als Ausgangswert in einem DEFINE DATA-Statement mit einem Syntaxfehler NAT0094
zurückgewiesen, wenn die entsprechende Variable nicht vom Format A, U oder B ist.
Beispiel:
DEFINE DATA LOCAL 1 #I(I2) INIT <H'000F'> /* causes a NAT0094 syntax error END-DEFINE
Hexadezimale Konstanten können mittels eines Bindestrichs zwischen den Konstanten miteinander verkettet werden.
ASCII-Beispiel:
H'414243' - H'444546' (equivalent to 'ABCDEF')
EBCDIC-Beispiel:
H'C1C2C3' - H'C4C5C6' (equivalent to 'ABCDEF')
Auf diese Weise können hexadezimale Konstanten auch mit alphanumerischen Konstanten verkettet werden.
Die logischen Konstanten TRUE (wahr) und FALSE (falsch) können
benutzt werden, um einen logischen Wert einem mit Format L definierten Feld
zuzuweisen.
Beispiel:
DEFINE DATA LOCAL 1 #FLAG (L) END-DEFINE ... MOVE TRUE TO #FLAG ... IF #FLAG ... statement ... MOVE FALSE TO #FLAG END-IF ...
Gleitkomma-Konstanten können mit im Format F definierten Variablen benutzt werden.
Beispiel:
DEFINE DATA LOCAL 1 #FLT1 (F4) END-DEFINE ... COMPUTE #FLT1 = -5.34E+2 ...
Attribut-Konstanten können mit im Format C (Kontroll-Variablen) definierten Variablen benutzt werden. Diese Art von Konstante muss in Klammern stehen.
Die folgenden Attribute können benutzt werden:
| Attribut | Beschreibung |
|---|---|
AD=D |
Standard |
AD=B |
blinkend |
AD=I |
hell hervorgehoben |
AD=N
|
keine Anzeige |
AD=V
|
invers |
AD=U |
unterstrichen |
AD=C |
kursiv |
AD=Y
|
dynamisches Attribut |
AD=P |
geschützt |
CD=BL |
blau |
CD=GR |
grün |
CD=NE
|
neutral |
CD=PI
|
rosa |
CD=RE |
rot |
CD=TU
|
türkis |
CD=YE |
gelb |
Weitere Informationen zu diesen Attributen finden Sie bei den Session-Parametern
AD und CD.
Beispiel:
DEFINE DATA LOCAL 1 #ATTR (C) 1 #FIELD (A10) END-DEFINE ... MOVE (AD=I CD=BL) TO #ATTR ... INPUT #FIELD (CV=#ATTR) ...
Die Handle-Konstante NULL-HANDLE kann mit Objekt-Handles benutzt werden.
Weitere Informationen zu Objekt-Handles siehe NaturalX.
Wenn Sie denselben Konstanten-Wert mehrmals in einem Programm benutzen müssen, können Sie den Pflegeaufwand durch Definition einer Namens-Konstante reduzieren:
Definieren Sie ein Feld im DEFINE
DATA-Statement,
weisen Sie ihm einen Konstanten-Wert zu und
benutzen Sie im Programm den Feldnamen anstatt des Konstanten-Werts.
Wenn der Wert geändert werden muss, müssen Sie ihn somit nur einmal im DEFINE
DATA-Statement und nicht überall in dem Programm ändern, in dem er vorkommt.
Geben Sie den Konstanten-Wert in viereckigen Klammern mit dem Schlüsselwort
CONSTANT hinter
der Feld-Definition im DEFINE DATA-Statement an.
Wenn der Wert alphanumerisch ist, muss er in Apostrophen (') stehen.
Wenn der Wert Text im Unicode-Format ist, muss ihm das Zeichen U
vorangehen, und er muss in Apostrophen (') stehen.
Wenn der Wert im hexadezimalen Unicode-Format ist, müssen ihm die Zeichen
UH vorangehen, und er muss in Apostrophen (') stehen.
Beispiel:
DEFINE DATA LOCAL 1 #FIELDA (N3) CONSTANT <100> 1 #FIELDB (A5) CONSTANT <'ABCDE'> 1 #FIELDC (U5) CONSTANT <U'ABCDE'> 1 #FIELDD (U5) CONSTANT <UH'00410042004300440045'> END-DEFINE ...
Während der Ausführung des Programms kann der Wert einer solchen Namens-Konstante nicht geändert werden.