バージョン 4.2.5
 —  プログラミングガイド  —

ユーザー定義定数

定数は、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 オプションを使用した COMPUTEMOVEDEFINE DATA の各ステートメント内で数値定数を使用すると、コンパイル時に Natural によって、対応するフィールドに対して定数値が適しているかどうかが確認されます。 これにより、コンパイル時にエラー条件が検出されるため、ランタイムエラーを回避できます。

Top of page

英数字定数

以下では次のトピックについて説明します。

英数字定数

英数字定数には、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 進定数と連結することもできます。

Top of page

Unicode 定数

以下では次のトピックについて説明します。

Unicode テキスト定数

Unicode テキスト定数は、先頭に文字 U を指定し、その後の文字列を次のいずれかで囲む必要があります。:アポストロフィ(')

U'text'

または引用符(")

U"text"

例:

U'HELLO'

コンパイラは、このテキスト定数を Unicode フォーマット(UTF-16)で生成プログラムに格納します。

Unicode テキスト定数内のアポストロフィ

アポストロフィで囲まれた 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 16 進定数

以下の構文は、Unicode 文字または Unicode 文字列を 16 進表記で指定するために使用します。

UH'hhhh...'

h は、16 進数の桁(0~9、A~F)を表します。 UTF-16 Unicode 文字はダブルバイトであるため、指定する 16 進の文字数は 4 の倍数である必要があります。

例:

以下の例は、文字列 45 を定義しています。

UH'00340035'

Unicode 定数の連結

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

Top of page

日付/時刻の定数

以下では次のトピックについて説明します。

日付定数

日付定数は、フォーマット 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(国際式)を想定しています。

Top of page

16 進の定数

以下では次のトピックについて説明します。

16 進の定数

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 進定数の連結

定数の間にハイフンを使用すると、16 進定数を連結できます。

ASCII の例:

H'414243' - H'444546' (equivalent to 'ABCDEF')

EBCDIC の例:

H'C1C2C3' - H'C4C5C6' (equivalent to 'ABCDEF')

上記の方法で、16 進定数を英数字定数と連結することもできます。

Top of page

論理定数

論理定数 TRUE および FALSE は、フォーマット L で定義されたフィールドに論理値を割り当てるために使用できます。

例:

DEFINE DATA LOCAL
1 #FLAG (L)
END-DEFINE
...
MOVE TRUE TO #FLAG
...
IF #FLAG ...
  statement ...
  MOVE FALSE TO #FLAG 
END-IF
 ...

Top of page

浮動小数点定数

浮動小数点定数は、フォーマット F で定義された変数で使用できます。

例:

DEFINE DATA LOCAL
1 #FLT1 (F4)
END-DEFINE
...
COMPUTE #FLT1 = -5.34E+2
...

Top of page

属性定数

属性定数は、フォーマット 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)
...

Top of page

ハンドル定数

ハンドル定数 NULL-HANDLE は、オブジェクトハンドルで使用できます。

オブジェクトハンドルの詳細については、「NaturalX」を参照してください。

Top of page

名前付き定数の定義

同じ定数値を何度も使用する必要がある場合、以下のように名前付き定数を定義してメンテナンスの労力を減らすことができます。

これにより、値を変更する必要があるときには、プログラム内の関連するすべての場所を変更するのではなく、DEFINE DATA ステートメントを 1 回変更するだけですべての値を変更できます。

DEFINE DATA ステートメントのフィールド定義の後に、キーワード CONSTANT を付けた山カッコ(< と >)内に定数値を指定します。

例:

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 
...

プログラム実行中は、名前付き定数の値を変更できません。

Top of page