コードページ編集マスク - EM パラメータ

このドキュメントでは、英数字または数値フィールドの編集マスクを指定する方法について説明します。

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


EM パラメータの使用

セッションパラメータ EM を使用すると、英数字または数値フィールドに対して編集マスクを指定できます。つまり、フィールド値が出力されるフォーマットを文字単位で指定できます。セッションパラメータ EMU を使用すると、下記で説明する EM セッションパラメータと同じ方法で、Unicode 文字を使用した編集マスクを定義できます。

例:

DISPLAY NAME (EM=X^X^X^X^X^X^X^X^X^X)

この例で、それぞれの X は表示される英数字フィールド値の 1 文字を表し、それぞれの ^ は空白を表します。DISPLAY ステートメントで表示された場合、名前 JOHNSON は次のように表示されます。

J O H N S O N

セッションパラメータは以下のレベルで指定できます。 EM

  • レポートレベル(FORMAT ステートメント)。

  • ステートメントレベル(DISPLAYWRITEINPUTMOVE EDITED または PRINT ステートメント内)または

  • 要素レベル(DISPLAYWRITE または INPUT ステートメント)。

セッションパラメータ EM で指定した編集マスクは、DDM のフィールドに指定されたデフォルトの編集マスクを上書きします。「DDM エディタの使用」の「拡張フィールド属性の指定」を参照してください。

EM=OFF を指定すると、編集マスクは使用されません。

ステートメントレベルで指定した編集マスクは、レポートレベルで指定した編集マスクを上書きします。

要素レベルで指定した編集マスクは、ステートメントレベルで指定した編集マスクを上書きします。

数値フィールドの編集マスク

フォーマット N、P、I、または F のフィールドに指定した編集マスクには、1 つ以上の 9 または Z が含まれている必要があります。フィールド値の桁数より多くの 9 または Z を含めると、編集マスクの出力桁は、フィールド値に定義されている桁数に調整されます。逆に、フィールド値の桁数よりも 9 または Z が少ないと、小数点よりも前の桁または後の桁が切り捨てられます。

詳細については、『パラメータリファレンス』ドキュメントのセッションパラメータ EM、「数値フィールドの編集マスク」を参照してください。

英数字フィールドの編集マスク

英数字フィールドの編集マスクは、出力する英数字ごとに X が含まれている必要があります。

いくつかの例外を除いて、先頭文字、末尾文字、および挿入文字は、アポストロフィで囲んでも囲まなくても、追加できます。

シルコンフレクス文字(^)は、編集マスクに空白を挿入するために、数値フィールドおよび英数字フィールドの両方で使用します。

詳細については、『パラメータリファレンス』ドキュメントのセッションパラメータ EM、「英数字フィールドの編集マスク」を参照してください。

フィールドの長さ

編集マスクを割り当てるフィールドの長さに注意することが重要です。

  • 編集マスクがフィールドより長い場合、予期しない結果が発生します。

  • 編集マスクがフィールドより短い場合、フィールド出力は、編集マスクに指定された桁数に切り詰められます。

例:

ある英数字フィールドの長さが 12 文字で、出力されるフィールド値が JOHNSON であると仮定した場合、編集マスクによって以下のような結果が得られます。

編集マスク 出力
EM=X.X.X.X.X
J.O.H.N.S
EM=****XXXXXX****
****JOHNSO**

日付/時刻フィールドの編集マスク

日付フィールドの編集マスクには、D(日)、M(月)、および Y(年)の文字をさまざまな組み合わせで指定できます。

時刻フィールドの編集マスクには、H(時)、I(分)、S(秒)、および T(10 分の 1 秒)の文字をさまざまな組み合わせで指定できます。

日付フィールドおよび時刻フィールドの編集マスクとともに、日時システム変数も参照してください。

セパレータ文字の表示のカスタマイズ

Natural プログラムは世界中のビジネスアプリケーションで使用されます。数値データフィールドおよび日時を含むフィールドを I/O ステートメントで表示する場合には、地域的な慣習に応じて、特別な出力スタイルで表示するのが一般的です。それぞれの表示方法は、プログラムが実行されるロケールの機能として、選択的に処理される代替のプログラムコーディングで認識される必要はありません。ただし、小数点文字および "千桁単位セパレータ文字" を指定する一連のランタイムパラメータとともに、同じプログラムイメージを使用して実行される必要があります。

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

小数点記号

Natural パラメータ DC を使用すると、編集マスク内で小数点記号("基数点文字" とも呼ぶ)を表すために使用されている文字の代わりに挿入される文字を指定できます。このパラメータを使用すると、Natural プログラムまたはアプリケーションのユーザーは、任意(特定)の文字を選択して、数値データ項目の整数部と小数部を分けることができます。例えば、米国の店舗では小数点(.)を使用し、ヨーロッパの店舗ではコンマ(,)を使用することなどができます。

ダイナミック千桁単位セパレータ

大きい整数値の出力を構築する場合、一般的には整数の 3 桁ごとにセパレータが挿入されて、千桁ごとに値が分割されます。このセパレータは、"千桁単位セパレータ"と呼ばれます。例えば、米国の店舗では通常、このためにコンマを使用しますが(1,000,000 など)、ドイツの店舗ではピリオド(1.000.000)、フランスでは空白(1 000 000)を使用します。

Natural 編集マスクでは、"ダイナミック千桁単位セパレータ" にコンマ(またはピリオド)を使用して、ランタイム時に千桁単位セパレータ文字(THSEPCH パラメータで定義)が挿入される位置を示します。コンパイル時に、Natural プロファイルパラメータ THSEP またはシステムコマンド COMPOPT のオプション THSEP を使用することで、コンマ(またはピリオド)をダイナミック千桁単位セパレータとして解釈可能または解釈不可にできます。

THSEPOFF に設定した場合(デフォルト)、編集マスクで千桁単位セパレータとして使用されている文字はすべてリテラルとして処理され、ランタイム時にそのまま表示されます。この設定は下位互換性を保持します。

THSEPON に設定した場合、編集マスク内のコンマ(またはピリオド)はすべてダイナミック千桁単位セパレータとして解釈されます。一般的に、ダイナミック千桁単位セパレータはコンマですが、コンマがすでに小数点文字(DC)として使用されている場合には、ピリオドが千桁単位セパレータとして使用されます。

ランタイム時に、ダイナミック千桁単位セパレータは、THSEPCH パラメータの現在の値(千桁単位セパレータ文字)に置き換えられます。

パラメータ設定 DC='.' および THSEP=ON でカタログされている Natural プログラムで編集マスク(EM=ZZ,ZZZ,ZZ9.99)を使用します。

ランタイム時のパラメータ設定 表示内容
DC='.' および THSEPCH=',' 1,234,567.89
DC=',' および THSEPCH='.' 1.234.567,89
DC=',' および THSEPCH='/' 1/234/567,89
DC=',' および THSEPCH=' ' 1 234 567,89
DC=',' および THSEPCH='''' 1'234'567,89

編集マスクの例

編集マスクと編集マスクで作成される出力の例を以下に示します。

さらに、各編集マスクの省略表記法も示します。省略形または長い表記のどちらでも使用できます。

編集マスク 省略形 出力 A 出力 B
EM=999.99 EM=9(3).9(2) 367.32 005.40
EM=ZZZZZ9 EM=Z(5)9(1) 0 579
EM=X^XXXXX EM=X(1)^X(5) B LUE A 19379
EM=XXX...XX EM=X(3)...X(2) BLU...E AAB...01
EM=MM.DD.YY * 01.05.87 12.22.86
EM=HH.II.SS.T ** 08.54.12.7 14.32.54.3

* 日付システム変数を使用します。

** 時刻システム変数を使用します。

編集マスクの詳細については、『パラメータリファレンス』のセッションパラメータ EM を参照してください。

EM パラメータなしのプログラム例

** Example 'EDITMX01': Edit mask (using default edit masks)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 JOB-TITLE
  2 SALARY (1:3)
  2 CITY
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY 'N A M E'    NAME         /
          'OCCUPATION' JOB-TITLE
          'SALARY'     SALARY (1:3)
          'LOCATION'   CITY
  SKIP 1
END-READ
END

プログラム EDITMX01 の出力:

上記のプログラムの出力は、使用可能なデフォルトの編集マスクを示しています。

Page      1                                                  04-11-11  14:15:54
 
         N A M E            SALARY         LOCATION
       OCCUPATION
------------------------- ---------- --------------------
 
JONES                          46000 TULSA
MANAGER                        42300
                               39300
 
JONES                          50000 MOBILE
DIRECTOR                       46000
                               42700
 
JONES                          31000 MILWAUKEE
PROGRAMMER                     29400
                               27600

EM パラメータありのプログラム例

** Example 'EDITMX02': Edit mask (using EM)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 JOB-TITLE
  2 SALARY (1:3)
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
 DISPLAY 'N A M E'    NAME         (EM=X^X^X^X^X^X^X^X^X^X^X^X^X^X^X) /
                       FIRST-NAME   (EM=...X(10)...)
          'OCCUPATION' JOB-TITLE    (EM=' ___ 'X(12))
          'SALARY'     SALARY (1:3) (EM=' USD 'ZZZ,999)
  SKIP 1
END-READ
END

プログラム EDITMX02 の出力:

前のプログラム(EM パラメータなしのプログラム例)の出力と比較して、EM 指定がフィールドの表示方法に与える影響を確認します。

Page      1                                                  04-11-11  14:15:54
 
           N A M E               OCCUPATION      SALARY
         FIRST-NAME
----------------------------- ---------------- -----------
 
J O N E S                     ___ MANAGER      USD  46,000
..VIRGINIA  ...                                USD  42,300
                                               USD  39,300
 
J O N E S                     ___ DIRECTOR     USD  50,000
..MARSHA    ...                                USD  46,000
                                               USD  42,700
 
J O N E S                     ___ PROGRAMMER   USD  31,000
..ROBERT    ...                                USD  29,400
                                               USD  27,600

編集マスクの他の例

次の例のプログラムを参照してください。