このセッションパラメータでは、DEFINE DATA
、DISPLAY
、INPUT
、MOVE EDITED
、PRINT
、PROCESS PAGE
、または WRITE
ステートメントで使用される入力/出力フィールドに編集マスクを指定できます。
パラメータ EM
は、U フォーマットのフィールドでも使用できます。 Unicode フォーマットの詳細については、『Natural プログラミング言語での Unicode およびコードページのサポート』の「セッションパラメータ」で「EMU
、ICU
、LCU
、TCU
と EM
、IC
、LC
、TC
の比較」も参照してください。
可能な設定 | 下記を参照してください。 | |
---|---|---|
デフォルト設定 | なし | |
適用可能なステートメント: | FORMAT |
|
パラメータはステートメントレベルでもエレメントレベルでも指定できます。 | ||
MOVE EDITED |
パラメータはエレメントレベルで指定できます。 | |
適用可能なコマンド: | なし |
以下では次のトピックについて説明します。
『プログラミングガイド』の「編集マスク - EM パラメータ」を参照してください。
入力フィールドについては、値は編集マスクと正確に一致するように入力する必要があります。 入力フィールドに編集マスクを表示する場合、フィールドを変更可能フィールド(AD=M
)として定義する必要があります。
データベースフィールドについては、デフォルトの編集マスクが DDM で定義されている場合があります。 データベースフィールドに EM
パラメータで編集マスクを指定した場合、指定した編集マスクがデフォルトの編集マスク(DDM でフィールドに定義)の代わりに使用されます。
フィールドに EM=OFF
を指定した場合、DDM で編集マスクが定義されていても、フィールドには編集マスクは使用されません。
DISPLAY
、FORMAT
、INPUT
、または WRITE
ステートメントのステートメントレベルでは、EM=OFF
以外に、詳細なフィールド編集マスクは指定できません。
編集マスクの指定は、セッションパラメータ AL
、NL
、および SG
の設定を上書きします。
文字 9
、H
、X
、および Z
は、数値(9,Z
)、16 進数(H
)、および英数字(X
)編集マスクの有効な出力桁を表します。 9
と Z
の違いについては、下記の「数値フィールドの編集マスク」を参照してください。
DISPLAY AA(EM=OFF) AB(EM=XX.XX) WRITE SALARY (EM=ZZZ,ZZ9)
長い編集マスクに対しては、省略表記を使用できます。 次の例は、数値、16 進数、および英数字の編集マスクに使用できる省略表記を示しています。
EM=9(4)-9(5) is equivalent to: EM=9999-99999 EM=H(10) is equivalent to: EM=HHHHHHHHHH EM=X(6)..X(3) is equivalent to: EM=XXXXXX..XXX
編集マスク内の空白は、使用しているキーボードの文字で表され、16 進コードの H'20'
(ASCII)または H'5F'
(EBCDIC)に対応します。つまり、文字 ^
(または ¬
)です。
フィールドに編集マスクを指定しなかった場合、フィールドフォーマットに応じて、デフォルトの編集マスクが割り当てられます。
フィールドフォーマット | デフォルトの編集マスク |
---|---|
A | X |
B | H |
N、P、I | Z9 |
F | 技術表記 |
D | デフォルトの日付フォーマット(プロファイルパラメータ DTFORM で設定)によって異なる
|
T | HH:II:SS |
L | 空白 / X |
フォーマット N、P、I、または F のフィールドに指定した編集マスクには、1 つ以上の 9
または Z
が含まれている必要があります。
フィールド値の桁数より多くの 9
または Z
を含めると、編集マスクの出力桁は、フィールド値に定義されている桁数に調整されます。
逆に、フィールド値の桁数よりも 9
または Z
が少ないと、小数点よりも前の桁または後の桁が切り捨てられます。
以下では次のトピックについて説明します。
文字 | 機能 |
---|---|
9 |
出力桁(フィールド値の 1 桁) |
. (ピリオド)
|
挿入された最初のピリオドは小数点として使用されます。 後続のピリオドはリテラル文字として扱われます。
注意: |
Z |
先頭のゼロの省略。 数値フィールドのデフォルト値です。 文字 Z は浮動位置のゼロ省略を明示するために繰り返し指定できます。 Z は小数点より右の桁には指定できません。 編集マスクですべて Z を指定し、ゼロ値を空白として表示することもできます(セッションパラメータ ZP も参照)。
|
9
または Z
は、1 文字以上の他の文字の後に続けることができます。
9
または Z
の前の最初の文字が +
、-
、S
、または N
の場合、符号が表示されます。
文字 | 機能 |
---|---|
+ |
浮動位置の符号は、値の直前(先頭の符号文字)または直後(末尾の符号文字)に表示されます。 符号は、フィールドの値に応じて、プラスまたはマイナスとして生成されます。 |
- |
浮動位置のマイナス記号は、フィールド値が負の場合に、値の直前(先頭の符号文字)または直後(末尾の符号文字)に表示されます。 |
S |
符号は、列の左側に表示されます。 正の値にはプラス記号が表示され、負の値にはマイナス記号が表示されます。 |
N |
フィールド値が負の場合に、列の左側にマイナス記号が表示されます。 |
最初の出力桁(Z
または 9
で示される)の前に任意の数のリテラルリーディング文字を表示できます。 これらの文字は、符号文字の後に続く必要があります。 符号文字がなく、最初のリテラルリーディング文字が +
、-
、S
、または N
の場合、アポストロフィで囲む必要があります。 リテラルリーディング文字が H
、X
、Z
、または 9
の場合、アポストロフィで囲む必要があります。
値に先頭のゼロが含まれており、編集マスクが Z(先頭のゼロの省略)で定義されている場合にのみ、指定された最初のリテラルリーディング文字が出力に表示されます。 そのとき、この文字は、先頭のゼロに対する空白の代わりに、充填文字として表示されます。 後続のリテラルリーディング文字は、入力されたとおりに表示されます。
リテラル挿入および末尾文字も使用できます。 記号(^
)は、先頭の空白、挿入された空白、または末尾の空白を表すために使用できます。 有意文字(9
、H
、Z
、X
)をアポストロフィで囲むことで、先頭文字、挿入文字、または末尾文字として一般の文字と同じように使用できます。 有意性のない編集マスク文字については、アポストロフィで囲む必要はありません。 同様の編集マスク表記で、先頭文字、挿入文字、または末尾文字をグループとして扱うこともできます。アポストロフィで囲む必要がある場合と、そうでない場合があるので注意してください。
末尾の符号文字は、数値編集マスクの最後に +
または -
文字を使用して指定できます。 +
のときは、フィールドの値に応じて、末尾の +
記号または -
記号が生成されます。 -
のときは、フィールドの値に応じて、末尾のスペースまたは -
記号が生成されます。 編集マスクに先頭符号と末尾符号の両方を指定した場合は、どちらも出力されます。
次の表は、各列の先頭に示した値を編集マスクに従って編集した結果を示しています。 列ヘッダーとして使用されている値はすべて N フォーマットのフィールドです。 先頭の列の下の行は、異なる編集マスクを使用して得られたフォーマットです。
値 | 0000.03 (N4.2) |
-0054 (N4) |
+0087 (N4) |
0962 (N4) |
1830 (N4) |
---|---|---|---|---|---|
編集マスク | |||||
EM=9.9 |
0.0 |
4. |
7. |
2. |
0. |
EM=99 |
00 |
54 |
87 |
62 |
30 |
EM=S99 |
+00 |
-54 |
+87 |
+62 |
+30 |
EM=+Z9 |
+0 |
-54 |
+87 |
+62 |
+30 |
EM=-9.99 |
0.03 |
-4. |
7. |
2. |
0. |
EM=N9 |
0 |
-4 |
7 |
2 |
0 |
EM=*9.99 |
0.03 |
4. |
7. |
2. |
0. |
EM=Z99 |
00 |
54 |
87 |
962 |
830 |
EM=*DMZZ9.9 |
DM**0.0 |
DM*54. |
DM*87. |
DM962. |
DM830. |
EM=999+ |
000+ |
054- |
087+ |
962+ |
830+ |
EM=999- |
000 |
054- |
087 |
962 |
830 |
IC=$ EM=ZZZ.99 |
$.03 |
$54. |
$87. |
$962. |
$830. |
EM=H(6) |
|||||
- ASCII: | 303030303033 |
30303574 |
30303837 |
30393632 |
31383330 |
- EBCDIC: | F0F0F0F0F0F3 |
F0F0F5D4 |
F0F0F8F7 |
F0F9F6F2 |
F1F8F3F0 |
パラメータ IC
および TC
を組み合わせれば、負の数でも DISPLAY
ステートメントを使用してさまざまな形式で出力できます。
A フォーマットのフィールドにのみ使用される英数字編集マスクには、出力される文字を表す X
が 1 つ以上含まれている必要があります。 最初の文字が H
のときは、16 進の編集マスクとなります。 空白は(^
)記号で表されます。 カッコを除くすべての文字は、先頭文字、末尾文字、および挿入文字として使用できます。 アポストロフィで囲まれた先頭文字、挿入文字、または末尾文字を指定することも可能です。 文字 X
、閉じカッコ、または引用符を挿入文字として指定する場合は、アポストロフィで囲む必要があります。
先頭文字を英数字編集マスクの最初の出力桁 X
の前に使用した場合、これらの先頭文字の最初の文字は出力されず、充填文字として英数字出力フィールドの先頭のすべての空白を置き換えるために使用されます。
DEFINE DATA LOCAL 1 #X (A4) INIT <' 34'> END-DEFINE WRITE #X (EM=*A:X:) 6X #X (EM=*A:XX:) 6X #X (EM=*A:XXX:) 6X #X (EM=*A:XXXX:) 6X #X (EM=1234XXXX5678) END
A:*: A:**: A:**3: A:**34: 23411345678
最後の出力桁の直後の末尾文字は出力されます。
マスクで指定した桁数がフィールド長より短い場合、マスクの長さに合わせて出力されます。
マスクで指定した桁数がフィールド長より長い場合、マスクの先頭の余分な桁が切り捨てられます。
DEFINE DATA LOCAL 1 #TEXT (A4) INIT <'BLUE'> END-DEFINE WRITE #TEXT (EM=X-X-X) WRITE #TEXT (EM=X-X-X-X-X) |
displays as 'B-L-U' .. only three bytes of field displayed displays as 'B-L-U-E-' .. mask definition was truncated to (EM=X-X-X-X-) |
次のプログラムでは、値 BLUE
を含むフィールド(フォーマット/長さ A4)の英数字編集マスクのリストを作成しています。
** Example 'EMMASK1': Edit mask ************************************************************************ DEFINE DATA LOCAL 1 #TEXT (A4) END-DEFINE * ASSIGN #TEXT = 'BLUE' WRITE NOTITLE 'MASK 1:' 5X #TEXT (EM=X.X.X.X) / 'MASK 2:' 5X #TEXT (EM=X^X^X^X) / 'MASK 3:' 5X #TEXT (EM=X--X--X) / 'MASK 4:' 5X #TEXT (EM=X-X-X-X-X-X) / 'MASK 5:' 5X #TEXT (EM=X' 'X' 'X' 'X) / 'MASK 6:' 5X #TEXT (EM=XX....XXX) / 'MASK 7:' 5X #TEXT (EM=1234XXXX) END
プログラム EMMASK1
の出力:
MASK 1: B.L.U.E MASK 2: B L U E MASK 3: B--L--U MASK 4: B-L-U-E- MASK 5: B L U E MASK 6: BL....UE MASK 7: 234BLUE
バイナリフィールドの編集マスクは、X
または H
表記を使用して設定できます。 バイナリフィールドについては、X
表記は、X
の代わりに H
が指定した場合のようにサポートされます。
編集マスクの最初の文字として H
を指定した場合、英数字フィールドまたは数値フィールドの内容は 16 進形式で出力されます。 各 H
は、ソースフィールドの 1 バイトに対する 2 つの出力桁を表します。 H
以外の文字は、マスク内の挿入文字または末尾文字として扱われます。 編集マスクの長さがフィールド長より短い場合、出力桁はマスクの長さに調整されます。 フィールド長が編集マスクの長さより短い場合、マスクの長さがフィールド長に調整されます。
挿入文字または末尾文字は、必要に応じてアポストロフィで囲んで指定することもできます。
16 進編集マスクで出力されたフィールドはすべて英数字として扱われます。 そのため、編集マスクが編集対象のフィールドよりも短い場合、数値または英数字の桁は、小数点位置を無視して左から右へ出力されます。
16 進編集マスクを入力編集マスクとして使用する場合、0
~9
、a
~f
、A
~F
、空白、および 16 進ゼロは、16 進数字として受け入れられます。
注意:
空白と 16 進ゼロは 0
としてみなされ、小文字(a-f
)は大文字としてみなされます。
次の表は、16 進編集マスクの例を示しています。この結果は、各列の上部に示したフィールドと値に基づいています。 編集マスクが適用されているすべての数値(-10
、+10
、01
)が、N2 フォーマットで定義されたフィールドに格納されています。 英数字値 AB
は、フォーマット/長さ A2 で定義されたフィールドに格納されています。
値 => | AB |
-10 |
+10 |
01 |
EM=HH |
4142 |
3170 |
3130 |
3031 |
EM=H^H |
41 42 |
31 70 |
31 30 |
30 31 |
EM=HH^H |
4142 |
3170 |
3130 |
3031 |
EM=H-H |
41-42 |
31-70 |
31-30 |
30-31 |
EM=H |
41 |
31 |
31 |
30 |
値 => | AB |
-10 |
+10 |
01 |
EM=HH |
C1C2 |
F1D0 |
F1F0 |
F0F1 |
EM=H:H |
C1 C2 |
F1 D0 |
F1 F0 |
F0 F1 |
EM=HH:H |
C1C2 |
F1D0 |
F1F0 |
F0F1 |
EM=H-H |
C1-C2 |
F1-D0 |
F1-F0 |
F0-F1 |
EM=H |
C1 |
F1 |
F1 |
F0 |
** Example 'EMMASK2': Edit mask ************************************************************************ DEFINE DATA LOCAL 1 #TEXT1 (A2) 1 #TEXT2 (N2) END-DEFINE * ASSIGN #TEXT1 = 'AB' ASSIGN #TEXT2 = 10 * WRITE NOTITLE 'MASK (EM=HH) :' 18T #TEXT1 (EM=HH) 30T #TEXT2 (EM=HH) / 'MASK (EM=H^H) :' 18T #TEXT1 (EM=H^H) 30T #TEXT2 (EM=H^H) / 'MASK (EM=HH^H):' 18T #TEXT1 (EM=HH^H) 30T #TEXT2 (EM=HH^H) / 'MASK (EM=H-H) :' 18T #TEXT1 (EM=H-H) 30T #TEXT2 (EM=H-H) / 'MASK (EM=H) :' 18T #TEXT1 (EM=H) 30T #TEXT2 (EM=H) END
プログラム EMMASK2 の出力(ASCII):
MASK (EM=HH) : 4142 3130 MASK (EM=H^H) : 41 42 31 30 MASK (EM=HH^H): 4142 3130 MASK (EM=H-H) : 41-42 31-30 MASK (EM=H) : 41 31
プログラム EMMASK2 の出力(EBCDIC):
MASK (EM=HH) : C1C2 F1F0 MASK (EM=H^H) : C1 C2 F1 F0 MASK (EM=HH^H): C1C2 F1F0 MASK (EM=H-H) : C1-C2 F1-F0 MASK (EM=H) : C1 F1
フォーマット D(日付)またはフォーマット T(時刻)で定義されたフィールドの編集マスクでは、次に示す文字を指定できます。
文字 | 使用方法 |
---|---|
DD |
日 |
ZD |
日、ゼロ省略 |
MM |
月 |
ZM |
月、ゼロ省略 |
YYYY |
年、4 桁(「入力編集マスクのヒント」を参照) |
YY |
年、2 桁(「入力編集マスクのヒント」を参照) |
Y |
年、1 桁 入力フィールドでは使用しないでください。 |
WW |
週(「入力編集マスクのヒント」および「出力編集マスクでの週表示のヒント」を参照) |
ZW |
週、ゼロ省略(「入力編集マスクのヒント」および「出力編集マスクでの週表示のヒント」を参照) |
JJJ |
ユリウス日 |
ZZJ |
ユリウス日、ゼロ省略 |
NN... または N(n) |
曜日名(言語に依存) 最大長は N の個数または n の値で決まります。 名前が最大長より長い場合、切り捨てが発生します。短い場合には、実際の長さの名前が使用されます。
|
O |
曜日番号 プロファイルパラメータ DTFORM によって、週の開始が月曜日か日曜日かが決まります。 DTFORM=U の場合:(日曜日 = 1、月曜日 = 2 など) DTFORM=other の場合:(月曜日 = 1、火曜日 = 2 など)
|
LL... または L(n) |
月名(言語に依存) 最大長は L の個数または n の値で決まります。 名前が最大長より長い場合、切り捨てが発生します。短い場合には、実際の長さの名前が使用されます。 |
R |
ローマ数字の年(最大 13 桁) 入力フィールドでは使用しないでください。 年の出力値の上限は 2887 です。 |
入力および出力編集マスクに対して、次のものを使用することはできません。
テキスト | 文字 | ||||
---|---|---|---|---|---|
月 | with | 月名 | MM または ZM |
with | LL または L(n) |
曜日名 | with | 曜日番号 | NN または N(n) |
with | O |
入力編集マスクに対して、次のものを使用することはできません。
テキスト | 文字 | ||||
---|---|---|---|---|---|
1 桁年 | nor | ローマ数字の年 | Y |
nor | R |
日 | without | 月または月名 | DD または ZD |
without | MM 、ZM 、LL 、または L(n) |
週 | without | 年 | WW または ZW |
without | YYYY または YY |
月 | without | 年 | MM または ZM |
without | YYYY または YY |
ユリウス日 | without | 年 | JJJ または ZZJ |
without | YYYY または YY |
曜日名 | without | 週 | NN または N(n) |
without | WW または ZW |
曜日番号 | without | 週 | O |
without | WW または ZW |
ユリウス日 | with | 月 | JJJ または ZZJ |
with | MM または ZM |
ユリウス日 | with | 週 | JJJ または ZZJ |
with | WW または ZW |
月 | with | 週 | MM または ZM |
with | WW または ZW |
有効の年の値(YYYY
)の範囲は 1582~2699
です。 プロファイルパラメータ MAXYEAR
が 9999
に設定されている場合、1582~9999
が年の値の有効な範囲になります。
入力編集マスクに年(YY
または YYYY
)のみを指定し、月や日を指定しなかった場合、月と日の値は両方とも 01
に設定されます。 入力編集マスクに年(YY
または YYYY
)と月(MM
)のみを指定し、日を指定しなかった場合、日の値は 01
に設定されます。
2 桁年(YY
)を使用する場合、年表記を満たすために使用される世紀は、デフォルトで現在の世紀になります。 ただし、スライディングまたは固定ウィンドウが設定されているとき、これは適用されません。 詳細については、『Natural パラメータリファレンス』ドキュメントのプロファイルパラメータ
YSLW
を参照してください。
週番号(WW
または ZW
)を曜日番号(O
)または曜日名(NN...
)なしで指定した場合、週の最初の曜日とみなされます。
DTFORM=U
(USA 形式)が設定されている場合、週は日曜日から始まります。他のすべての DTFORM
設定については、最初の曜日は月曜日です。 週が旧年の 52/53 週であるか、新年の 01 週であるかどうかは、年にその週を超える日が含まれているかに依存します。 つまり、その週の木曜日(DTFORM=U
では水曜日)が前年にある場合、その週は前年に属します。翌年にある場合、その週は翌年に属します。
週番号(WW
または ZW
)と年表記(YYYY
、YY
、または Y
)が同じ編集マスク内にある場合、年の表示は、基礎となる日付フィールドの年に関係なく、常に週番号に対応します。
DEFINE DATA LOCAL 1 D (D) END-DEFINE MOVE EDITED '31-12-2003' TO D(EM=DD-MM-YYYY) DISPLAY D(EM=DD-MM-YYYY_N(10)) D(EM=DD-MM-YYYY/WW)
週番号 WW
が編集マスクに含まれている場合、基礎となる日付が 2003 年 12 月 31 日であっても、次のように表示されます。
D D -------------------- ------------- 31-12-2003_Wednesday 31-12-2004/01
文字 | 使用方法 |
---|---|
T |
10 分の 1 秒 |
SS |
秒 |
ZS |
秒、ゼロ省略 |
II |
分 |
ZI |
分、ゼロ省略 |
HH |
時間 |
ZH |
時間、ゼロ省略 |
AP |
AM/PM 要素 |
** Example 'EMDATI': Edit mask for date and time variables ************************************************************************ * WRITE NOTITLE 'DATE INTERNAL :' *DATX (DF=L) / ' :' *DATX (EM=N(9)' 'ZW.'WEEK 'YYYY) / ' :' *DATX (EM=ZZJ'.DAY 'YYYY) / ' ROMAN :' *DATX (EM=R) / ' AMERICAN :' *DATX (EM=MM/DD/YYYY) 12X 'OR ' *DAT4U / ' JULIAN :' *DATX (EM=YYYYJJJ) 15X 'OR ' *DAT4J / ' GREGORIAN:' *DATX (EM=ZD.''L(10)''YYYY) 5X 'OR ' *DATG /// * 'TIME INTERNAL :' *TIMX 14X 'OR ' *TIME / ' :' *TIMX (EM=HH.II.SS.T) / ' :' *TIMX (EM=HH.II.SS' 'AP) / ' :' *TIMX (EM=HH) END
プログラム EMDATI
の出力:
DATE INTERNAL : 2005-01-12 : Wednesday 2.WEEK 2005 : 12.DAY 2005 ROMAN : MMV AMERICAN : 01/12/2005 OR 01/12/2005 JULIAN : 2005012 OR 2005012 GREGORIAN: 12.January2005 OR 12January 2005 TIME INTERNAL : 16:04:14 OR 16:04:14.8 : 16.04.14.8 : 04.04.14 PM : 16
フォーマット L(論理フィールド)のフィールドに対しては、次のように編集マスクを定義できます。
(EM =[false-string/]true-string)
|
false-string は 31 文字を超えないようにする必要があります。
** Example 'EMLOGV': Edit mask for logical variables ************************************************************************ DEFINE DATA LOCAL 1 #SWITCH (L) INIT <true> 1 #INDEX (I1) END-DEFINE * FOR #INDEX 1 5 WRITE NOTITLE #SWITCH (EM=FALSE/TRUE) 5X 'INDEX =' #INDEX WRITE NOTITLE #SWITCH (EM=OFF/ON) 7X 'INDEX =' #INDEX IF #SWITCH MOVE FALSE TO #SWITCH ELSE MOVE TRUE TO #SWITCH END-IF /* SKIP 1 END-FOR END
プログラム EMLOGV
の出力:
TRUE INDEX = 1 ON INDEX = 1 FALSE INDEX = 2 OFF INDEX = 2 TRUE INDEX = 3 ON INDEX = 3 FALSE INDEX = 4 OFF INDEX = 4 TRUE INDEX = 5 ON INDEX = 5