定数は、Natural プログラム全体で使用できます。 このドキュメントでは、サポートされている定数のタイプとその使用方法について説明します。
このドキュメントでは、次のトピックについて説明します。
以下では次のトピックについて説明します。
数値定数には、1~29 桁の数字と小数点表記のための特殊文字(ピリオドまたはコンマ)を指定できます。
例:
1234 +1234 -1234 12.34 +12.34 -12.34
MOVE 3 TO #XYZ COMPUTE #PRICE = 23.34 COMPUTE #XYZ = -103 COMPUTE #A = #B * 6074
数値定数は、内部的にはパック型フォーマット(フォーマット P)で表されます。ただし、数値定数が算術演算で使用され、もう 1 つのオペランドが整数の変数(フォーマット I)の場合は例外的に、数値定数は整数フォーマット(フォーマット I)で表されます。
INIT
オプションを使用した COMPUTE
、MOVE
、DEFINE DATA
の各ステートメント内で数値定数を使用すると、コンパイル時に Natural によって、対応するフィールドに対して定数値が適しているかどうかが確認されます。 これにより、コンパイル時にエラー条件が検出されるため、ランタイムエラーを回避できます。
以下では次のトピックについて説明します。
英数字定数には、1~1073741824 バイト(1 GB)の英数字を指定できます。
英数字定数は、次のいずれかで囲む必要があります。:アポストロフィ(')
'text'
または引用符(")
"text"
例:
MOVE 'ABC' TO #FIELDX MOVE '% INCREASE' TO #TITLE DISPLAY "LAST-NAME" NAME
注意:
ユーザー定義変数に割り当てるために使用する 1 つの英数字定数は、複数のステートメント行に分割できません。
アポストロフィで囲まれた英数字定数内で 1 つのアポストロフィを表すには、2 つのアポストロフィまたは 1 つの引用符を使用する必要があります。
引用符で囲まれた英数字定数内で 1 つのアポストロフィを表すには、1 つのアポストロフィを指定します。
例:
以下を出力するとします。
HE SAID, 'HELLO'
以下のいずれの表記も使用できます。
WRITE 'HE SAID, ''HELLO''' WRITE 'HE SAID, "HELLO"' WRITE "HE SAID, ""HELLO""" WRITE "HE SAID, 'HELLO'"
注意:
上述したように引用符がアポストロフィに変換されない場合、これはプロファイルパラメータ TQ
(Translate Quotation Marks)の設定が原因です。詳細については、Natural の管理者に問い合わせてください。
ハイフンを使用すると、複数の英数字定数を 1 つの値として連結できます。
例:
MOVE 'XXXXXX' - 'YYYYYY' TO #FIELD MOVE "ABC" - 'DEF' TO #FIELD
上記の方法で、英数字定数を 16 進定数と連結することもできます。
以下では次のトピックについて説明します。
Unicode テキスト定数は、先頭に文字 U
を指定し、その後の文字列を次のいずれかで囲む必要があります。:アポストロフィ(')
U'text'
または引用符(")
U"text"
例:
U'HELLO'
コンパイラは、このテキスト定数を Unicode フォーマット(UTF-16)で生成プログラムに格納します。
アポストロフィで囲まれた Unicode テキスト定数内で 1 つのアポストロフィを表すには、2 つのアポストロフィまたは 1 つの引用符を使用する必要があります。
引用符で囲まれた Unicode テキスト定数内で 1 つのアポストロフィを表すには、1 つのアポストロフィを指定します。
例:
以下を出力するとします。
HE SAID, 'HELLO'
以下のいずれの表記も使用できます。
WRITE U'HE SAID, ''HELLO''' WRITE U'HE SAID, "HELLO"' WRITE U"HE SAID, ""HELLO""" WRITE U"HE SAID, 'HELLO'"
注意:
上述したように引用符がアポストロフィに変換されない場合、これはプロファイルパラメータ TQ
(Translate Quotation Marks)の設定が原因です。詳細については、Natural の管理者に問い合わせてください。
以下の構文は、Unicode 文字または Unicode 文字列を 16 進表記で指定するために使用します。
UH'hhhh...'
h は、16 進数の桁(0~9、A~F)を表します。 UTF-16 Unicode 文字はダブルバイトであるため、指定する 16 進の文字数は 4 の倍数である必要があります。
例:
以下の例は、文字列 45
を定義しています。
UH'00340035'
Unicode テキスト定数(U)および Unicode 16 進定数(UH)は、連結できます。
有効な例:
MOVE U'XXXXXX' - UH'00340035' TO #FIELD
Unicode テキスト定数または Unicode 16 進定数は、コードページ英数字定数または H 定数とは連結できません。
無効な例:
MOVE U'ABC' - 'DEF' TO #FIELD MOVE UH'00340035' - H'414243' TO #FIELD
その他の有効な例:
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
以下では次のトピックについて説明します。
日付定数は、フォーマット D の変数とともに使用します。
日付定数は、以下の形式で定義します。
D'yyyy-mm-dd' |
国際式 |
D'dd.mm.yyyy' |
ドイツ式 |
D'dd/mm/yyyy' |
ヨーロッパ式 |
D'mm/dd/yyyy' |
US 日付フォーマット |
上記の dd
は日、mm
は月、yyyy
は年を表します。
例:
DEFINE DATA LOCAL 1 #DATE (D) END-DEFINE ... MOVE D'2004-03-08' TO #DATE ...
デフォルトの日付形式は、プロファイルパラメータ DTFORM
(日付形式)を使用して、Natural 管理者が制御します。
時刻定数は、フォーマット T の変数とともに使用します。
時刻定数は、以下の形式で定義します。
T'hh:ii:ss'
上記の hh
は時間、ii
は分、ss
は秒を表します。
例:
DEFINE DATA LOCAL 1 #TIME (T) END-DEFINE ... MOVE T'11:33:00' TO #TIME ...
日付情報は時刻情報のサブセットであるため、時刻変数(フォーマット T)には、日付および時刻の情報を格納できます。ただし、"標準の" 時刻定数(接頭辞 T
)では、時刻変数の時刻情報のみを処理できます。
T'hh:ii:ss'
拡張時刻定数(接頭辞 E
)を使用すると、日付情報を含む、時刻変数のすべての内容を処理できます。
E'yyyy-mm-dd hh:ii:ss'
この点を除き、拡張時刻定数と時刻変数の使用方法は、標準の時刻定数の場合と同じです。
注意:
拡張時刻定数に指定する必要のある日付情報の形式は、プロファイルパラメータ DTFORM
の設定によって決まります。 上記の拡張時刻定数は、DTFORM=I
(国際式)を想定しています。
以下では次のトピックについて説明します。
16 進定数では、標準のキーボード文字で入力できない値を指定できます。
16 進定数には、1~1073741824 バイト(1 GB)の英数字を指定できます。
接頭文字 H
で、16 進定数を示します。 定数自身は、16 進数を表す文字(0~9、A~F)で構成される文字列をアポストロフィで囲む必要があります。 1 バイトのデータを表すには、2 つの 16 進文字が必要です。
16 進文字表現は、コンピュータが ASCII 文字セットを使用しているか、EBCDIC 文字セットを使用しているかによって異なります。 したがって、16 進定数を別のコンピュータに転送する場合、文字変換が必要になることがあります。
ASCII の例:
H'313233' (equivalent to the alphanumeric constant '123') H'414243' (equivalent to the alphanumeric constant 'ABC')
EBCDIC の例:
H'F1F2F3' (equivalent to the alphanumeric constant '123') H'C1C2C3' (equivalent to the alphanumeric constant 'ABC')
16 進定数を別のフィールドに転送する場合は、英数字値(フォーマット A)として扱われます。
フォーマット A、U、B 以外で定義されているフィールドに、英数字値(フォーマット A)をデータ転送することはできません。 したがって、対応する変数がフォーマット A、U、B ではない場合に DEFINE DATA
ステートメントで 16 進定数を初期値として使用すると、構文エラー NAT0094 で拒否されます。
例:
DEFINE DATA LOCAL 1 #I(I2) INIT <H'000F'> /* causes a NAT0094 syntax error END-DEFINE
定数の間にハイフンを使用すると、16 進定数を連結できます。
ASCII の例:
H'414243' - H'444546' (equivalent to 'ABCDEF')
EBCDIC の例:
H'C1C2C3' - H'C4C5C6' (equivalent to 'ABCDEF')
上記の方法で、16 進定数を英数字定数と連結することもできます。
論理定数 TRUE
および FALSE
は、フォーマット L で定義されたフィールドに論理値を割り当てるために使用できます。
例:
DEFINE DATA LOCAL 1 #FLAG (L) END-DEFINE ... MOVE TRUE TO #FLAG ... IF #FLAG ... statement ... MOVE FALSE TO #FLAG END-IF ...
浮動小数点定数は、フォーマット F で定義された変数で使用できます。
例:
DEFINE DATA LOCAL 1 #FLT1 (F4) END-DEFINE ... COMPUTE #FLT1 = -5.34E+2 ...
属性定数は、フォーマット C で定義された変数(制御変数)で使用できます。 属性定数は、カッコで囲む必要があります。
次の属性を使用できます。
属性 | 説明 |
---|---|
AD=D |
デフォルト |
AD=B |
点滅 |
AD=I |
高輝度 |
AD=N |
非表示 |
AD=V |
反転 |
AD=U |
下線付き |
AD=C |
イタリック |
AD=Y |
ダイナミック属性 |
AD=P |
保護 |
CD=BL |
青 |
CD=GR |
緑 |
CD=NE |
デフォルト色 |
CD=PI |
ピンク |
CD=RE |
赤 |
CD=TU |
空色 |
CD=YE |
黄色 |
セッションパラメータ AD
および CD
の説明も参照してください。
例:
DEFINE DATA LOCAL 1 #ATTR (C) 1 #FIELD (A10) END-DEFINE ... MOVE (AD=I CD=BL) TO #ATTR ... INPUT #FIELD (CV=#ATTR) ...
ハンドル定数 NULL-HANDLE
は、オブジェクトハンドルで使用できます。
オブジェクトハンドルの詳細については、「NaturalX」を参照してください。
同じ定数値を何度も使用する必要がある場合、以下のように名前付き定数を定義してメンテナンスの労力を減らすことができます。
DEFINE DATA
ステートメント内でフィールドを定義します。
フィールドに定数値を割り当てます。
プログラムで定数値ではなくフィールド名を使用します。
これにより、値を変更する必要があるときには、プログラム内の関連するすべての場所を変更するのではなく、DEFINE DATA
ステートメントを 1 回変更するだけですべての値を変更できます。
DEFINE DATA
ステートメントのフィールド定義の後に、キーワード CONSTANT
を付けた山カッコ(< と >)内に定数値を指定します。
値が英数字の場合、アポストロフィで囲む必要があります。
値が Unicode テキストフォーマットの場合、先頭に文字 U
を指定し、その後の文字列をアポストロフィで囲む必要があります。
値が Unicode 16 進フォーマットの場合、先頭に文字 UH
を指定し、その後の文字列をアポストロフィで囲む必要があります。
例:
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 ...
プログラム実行中は、名前付き定数の値を変更できません。