リテラルは、プログラム中で参照することのできる自己定義定数です。リテラルは、RPG IV データ・タイプのいずれかに含めることができます。
文字リテラル
文字リテラルを指定する場合の規則は次のとおりです。
16 進数リテラルを指定する場合の規則は次のとおりです。
X'x1x2...xn'
ここで、X'x1x2...xn' には、
文字 A から F、a から f、および 0 から 9 しか含めることができません。数値リテラルを指定する場合の規則は次のとおりです。
浮動形式の数値リテラルは、異なった方法で指定されます。 浮動リテラルの形式は次のとおりです。
<mantissa>E<exponent> ここで、 <mantissa> は、上記で説明した 1 から 16 桁のリテラルです。 <exponent> は、-308 から +308 までの値を持つ、小数部 なしのリテラルです。
次のリストは、有効な浮動リテラルをいくつか例証したものです。
1E1 = 10 1.2e-1 = .12 -1234.9E0 = -1234.9 12e12 = 12000000000000 +67,89E+0003 = 67890 (コンマは小数点です)
次のリストは、無効な浮動リテラルをいくつか例証したものです。
1.234E <--- 指数がありません 1.2e- <--- 指数がありません -1234.9E+309 <--- 指数が大きすぎます 12E-2345 <--- 指数が小さすぎます 1.797693134862316e308 <--- 値が大きすぎます 179.7693134862316E306 <--- 値が大きすぎます 0.0000000001E-308 <--- 値が小さすぎます
日付リテラル
日付リテラルは形式 D'xx-xx-xx' をとります。ここで、
時刻リテラルは形式 T'xx:xx:xx' をとります。ここで、
タイム・スタンプ・リテラルは、形式 Z'yyyy-mm-dd-hh.mm.ss.mmmmmm' を とります。ここで、
図形リテラルは形式 G'oK1K2i' をとります。ここで、
UCS-2 リテラルは、形式 U'Xxxx...Yyyy' をとります。ここで、
UCS-2 リテラルは、モジュールのデフォルトの UCS-2 CCSID 内にあると想定されます。
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 H DATFMT(*ISO) * Examples of literals used to initialize fields DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ D DateField S D INZ(D'1988-09-03') D NumField S 5P 1 INZ(5.2) D CharField S 10A INZ('abcdefghij') D UCS2Field S 2C INZ(U'00610062') * Even though the date field is defined with a 2-digit year, the * initialization value must be defined with a 4-digit year, since * all literals must be specified in date format specified * on the control specification. D YmdDate S D INZ(D'2001-01-13') D DATFMT(*YMD) * Examples of literals used to define named constants D DateConst C CONST(D'1988-09-03') D NumConst C CONST(5.2) D CharConst C CONST('abcdefghij') * Note that the CONST keyword is not required. D Upper C 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * Note that the literal may be continued on the next line D Lower C 'abcdefghijklmn- D opqrstuvwxyz' * Examples of literals used in operations C EVAL CharField = 'abc' C IF NumField > 12 C EVAL DateField = D'1995-12-25' C ENDIF
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D.....................................Keywords+++++++++++++++++++++++++++++ * The following two definitions are equivalent: D varfld1 S 5 INZ VARYING D varfld2 S 5 INZ('') VARYING * Various fields used by the examples below: D blanks S 10 INZ D vblanks S 10 INZ(' ') VARYING D fixfld1 S 5 INZ('abcde') * VGRAPHIC and VUCS2 are initialized with zero-length literals. D vgraphic S 10G INZ(G'oi') VARYING D vucs2 S 10C INZ(U'') VARYING CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq++++ * The following statements do the same thing: C eval varfld1 = '' C clear varfld1 * Moving '' to a variable-length field using MOVE(P) or MOVEL(P) * sets the field to blanks up to the fields current length. C move(p) '' varfld1 C movel(p) '' varfld1 * Moving '' to a fixed-length field has no effect in the following * examples: (The rightmost or leftmost 0 characters are changed.) C move '' fixfld1 C movel '' fixfld1 * The following comparisons demonstrate how the shorter operand * is padded with blanks: C eval *in01 = (blanks = '') * *in01 is '1' C eval *in02 = (vblanks = '') * *in02 is '1' C eval *in03 = (varfld2 = blanks) * *in03 is '1' C eval *in04 = (varfld2 = vblanks) * *in04 is '1' C eval *in05 = (%len(vgraphic)=0) * *in05 is '1' C eval *in06 = (%len(vucs2)=0) * *in06 is '1'
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.