2バイト文字支援機能のMicro Focus 拡張

2バイト文字支援機能に関するMicro Focusの拡張機能は、16ビット・コーディング方式(2バイト文字集合)を使用している環境向けに、Micro Focus社が提供する追加のプログラミング機能である。この機能には、以前のMicro Focus製品で提供されていた日本語支援機能がすべて組み込まれている。

プログラムをマルチベンダー統合体系 (MIA) 標準に準拠させたいか、またはプログラムにIBM VS COBOL IIまたはIBM SAAとの互換性をもたせたい場合は、2バイト文字支援機能の章を参照のこと。

COBOLシステムに用いられている8ビット・コードで表わした文字を、 1バイト文字と呼ぶ。隣接した2バイトを使用した16ビット・コードで表わした文字を、2バイト文字と呼ぶ。

2バイト文字支援機能に関するMicro Focusの拡張機能を使用するには、 NCHAR指令、または JAPANESE指令 を使用する。

2バイト文字支援機能に関するMicro Focusの拡張機能を使うと、2バイト文字支援機能の章 に定義した2バイト文字支援機能は、一部変更される。たとえば、1バイト文字のデータ項目から2バイト文字のデータ項目への転記操作に際して、1バイト文字から2バイト文字への変換が行われる。

字類NCHARとJAPANESE、および字類NCHAR-EDITEDとJAPANESE-EDITEDは同義語であり、どちらを使用してもよい。この章で、字類または項類NCHARまたは項類NCHAR-EDITEDと言うときは、それぞれ、字類または項類JAPANESEまたは項類JAPANESE-EDITEDと言うのと等しい。

NCHARデータ

NCHAR指令またはJAPANESE指令を設定すると、COBOLコンパイラは、項類がNCHARであるデータ、つまり2バイト文字が格納されているデータを認識するようになる。しかし、NCHAR指令またはJAPANESE指令は、項類が1バイト文字のデータの使用を妨げるわけではない。したがって、NCHAR指令またはJAPANESE指令を設定しても、1バイト文字のデータを使用することができる。

必要なハードウェアを備えていれば、入力や出力に使用されるNCHARデータ項目が認識されて、画面やキーボードやプリンタなどの装置にそれらのデータを適正に表示したり、データを受け取ったりすることができる。

原始プログラム

2バイト・コード文字は、定数、注記、注記項、利用者語に使用できる。これ以外については、NCHAR指令またはJAPANESE指令は、原始プログラム中で使用できる文字の範囲を変更しない。つまり、プログラムは依然としてCOBOLの文字集合(言語リファレンスCOBOL言語の概念の章を参照) を使用して書かれている。

言語の拡張

NCHARデータを含むデータ項目を定義するために、PICTURE句とUSAGE句が拡張されている。

NCHARデータの取扱いを定義するために、各種の指定や句や文に規則が追加されている。

特に断わりがないかぎり、COBOLのすべての機能と規則は、2バイト文字支援機能に関するMicro Focusの拡張機能を使用しているときでも適用される。以下に記述するのは、この拡張機能に関して追加されている規則と書き方だけである。

注記と注記項

注記および注記項の中では、1バイト文字と2バイト文字を自由に混ぜて書いてよい。

利用者語

下記の利用者語の中では、1バイト文字と2バイト文字を自由に混ぜて書いてよい。

符号系名、 通信記述名、 字類名、
条件名、 定数名、 データ名/一意名、
ファイル名、 指標名、 レベル番号、
登録集名、 呼び名、 実行用計算機名、
段落名、 プログラム名、 レコード名、
報告書名、 画面名、 節名、
区分番号、 翻訳用計算機名、 記号文字、
原文名

上記の利用者語に関しては、構文規則が追加されたものと考えた方がよい。ある文字が1バイト文字集合と2バイト文字集合の両方に存在するときは、両方の文字が等しいとはみなされない。

オペレーティングシステムによっては、下記の利用者語には、ASCII文字しか使用できないものがある。

外部ファイル参照、 登録集名、 プログラム名

空白

字類がNCHARのデータ中の空白は、2バイト・コードで表わされる。 2バイト・コードで表わされた空白文字を、「全角の空白」と呼ぶ。

全角の空白に割り当てられる値は、 NCHAR指令、 JAPANESE指令、DBSPACE指令の影響を受ける。

VALUE句をもたないすべてのデータ項目に共通するが、字類がNCHARのデータ項目の初期値は半角の空白となっている。

データ項目

NCHAR データ項目

言語リファレンスCOBOL言語の概念の章で説明した字類の他にNCHARを追加する。この字類には、項類としてNCHARとNCHAR-EDITEDの2つが含まれる。

字類がNCHARのデータ項目を表わすには、USAGE NCHAR句またはUSAGE JAPANESE句を使用する。この句を指定したデータ項目のPICTURE文字列には、文字"N", "B", "/" , "0" だけを書くことができる。

PICTURE文字列がすべて"N" であるデータ項目の項類は、NCHARである。PICTURE文字列中に"N","B", "/" , "0" が混在するデータ項目の項類は、NCHAR-EDITEDである。

PICTURE文字の"N", "B", "/" , "0" は、どちらも1つの2バイト文字の文字位置を表わす。NCHARデータ項目の長さは、そのPICTURE文字列中の "N", "B","/","0" の数で表わす。ただし、例外として別途規定している場合がある。

部分参照では、最左端文字位置と長さは、バイト数ではなく2バイト文字の数を指定する。

字類が英数字のデータ項目を使用できる箇所であれば、どこでも字類がNCHARのデータ項目を使用してよい。ただし、この章で後述する該当する規則に従うものとする。また、これには例外もある。

混合データ項目

項類が英数字のデータ項目中に収めたデータの中に、2バイト文字を含めることができる。このようなデータにおいては、1バイト文字は1バイト・コードで表わされ、2バイト文字は2バイト・コードで表わされる。空白は半角で表わされる。

プログラム内でデータを操作する際には、2バイト文字も通常の英数字と同様に扱われる。したがって、2バイト文字の2つのバイトが分割されないようにすることは、プログラマの責任である。

この型のデータ項目の長さは、計算機の記憶領域に格納したときは、すべての場合において、バイト単位で数える。

定数

NCHAR 定数

言語リファレンスCOBOL言語の概念の章で説明した文字定数と数字定数の他に、3番目の定数としてNCHAR定数が加えられている。

NCHAR定数は、両端を引用符またはアポストロフィで囲んだ文字列である。この文字列には、計算機の2バイト文字集合中の任意の文字を含めることができる。

NCHAR 定数の項類

文字定数を使用できる箇所ならばどこでも、すべての2バイト文字定数を使用できる。ただし、この章で後述する該当する規則に従うものとする。また、これには例外もある。

混合定数

文字定数の中に、2バイト文字を含めることができる。1バイト文字と2バイト文字が両方含まれる文字定数を「混合定数」と呼ぶ。このような定数においては、1バイト文字は1バイト・コードで表わされ、2バイト文字は2バイト・コードで表わされる。空白は半角で表わされる。

出力のとき、1バイト文字も2バイト文字も認識される。プログラム内でデータを操作する際には、2バイト文字定数も通常の文字定数と同様に扱われる。したがって、2バイト文字の2つのバイトが分割されないようにすることは、プログラマの責任である。

混合定数の項類は英数字であり、NCHARではない。

文字列の区切り文字として使用する引用符またはアポストロフィを混合定数中に含める場合は、その引用符を2つ続けて書かなければならない。区切り文字として使用しない文字を含める場合は、1つ書くだけでよい。実行用プログラム内での混合定数の値は、文字列そのものである。ただし、中に出てくる2つの連続した区切り文字は1つの文字として扱われる。

表意定数

(この章で記述する字類および項類に関する該当する規則に従って、)NCHAR字類定数だけを使用できる箇所で表意定数を使用した場合、これはNCHAR定数となる。

表意定数の値

定 数
内 容
NCHAR値の例
シフトJIS
EUC
ZERO
ZEROS
ZEROES
文脈に応じて、1つ以上の2バイト文字の"0" を表わす。 x"824F" x"A3B0"
SPACE
SPACES
計算機の文字集合の中の1つ以上の全角の空白を表わす。 x"8140"1 x"A1A1"1
HIGH-VALUE
HIGH-VALUES
プログラムの文字の大小順序の中で順序番号が最大の文字を1つ以上表わす。 x"FFFF" x"FFFF"
LOW-VALUE
LOW-VALUES
プログラムの文字の大小順序の中で順序番号が最小の文字を1つ以上表わす。 x"0000" x"0000"
QUOTE
QUOTES
1つ以上の2バイト文字の「"」を表わす。 x"818D"2 x"A1ED"2
1 この値はDBSPACE指令の影響を受ける。
2 この値はAPOST指令の影響を受ける。

環境部

実行用計算機段落

一般規則

コンパイラは、PROGRAM COLLATING SEQUENCE指定の中では、8ビット文字だけが使用できるように設計されている。

ALPHABET句を使用して、2バイト文字定数が含まれる文字の大小順序を定義することは無意味である。これは、2バイト文字が2つの別々の1バイト文字として扱われてしまうためである。このような形で2バイト文字を使用すると、2バイト文字は1バイト文字として並べられ、2バイト文字の意味は無視される。

文字の大小順序を定義するときに、ALPHABET句内にASCII文字以外の文字を含めることができる。たとえば、日本語環境において、シフトJISコードの半角の片仮名が使用できる。半角の片仮名は、1バイトの文字として格納され表示される。

 EUCを使用している場合は、ALPHABET句内に半角の片仮名を使用することはできない。これらはシフト・コードと組み合わせて2バイトで使用される。

特殊名段落

構文規則

  1. CURRENCY SIGN句において、定数-6は、NCHAR定数であっても、"N" であってもならない。

  2. ALPHABET句において、定数-1、定数-2、定数-3は、NCHAR定数であってはならない。

  3. CLASS句において、定数-4および定数-5は、NCHAR定数であってはならない。

ファイル管理段落

構文規則

  1. ASSIGN句において、定数-1はNCHAR定数でもよい。外部ファイル参照に、2バイト文字が含まれてもよい。

データ部

JUSTIFIED(けたよせ)句

一般規則

  1. NCHARデータ項目にも、JUSTIFIED句を適用できる。

PICTURE(形式)句

一般規則

  1. PICTURE句で表わせる項類が、NCHARとNCHAR-EDITEDの2種類追加されている。この2つの項類は、共にUSAGE IS NCHARまたはUSAGE IS JAPANESEと記述できる。

NCHAR データに関する規則

  1. PICTURE文字列に含めることのできる文字は、"N" だけである。

  2. 内容としては、2バイト文字集合中の任意の文字を含めることができる。

NCHAR-EDITED データに関する規則

  1. PICTURE文字列には、記号"N","B", "/", "0" を任意に組み合わせて含めることができる。

使用する記号

使用する記号の働きは下記のとおり。

記号
内 容
NCHAR値の例
シフトJIS
EUC
N 各"N"は、2バイト文字または全角の空白だけを含むことのできる文字位置を表わす。    
B 各"B"は、全角の空白を挿入する文字位置を表わす。 x"8140"1 x"A1A1"1
/ 各"/"は、 全角のスラッシュを挿入する文字位置を表わす。 x"851E" x"A1BF"
0 各"0"は、 全角のゼロを挿入する文字位置を表わす。 x"824F" x"A3B0"
1 この値はDBSPACE指令の影響を受ける。

"N", "B", "/", "0" は、それぞれ2バイト文字の1つの文字位置を表わすので注意すること。

編集規則

データ項目にどのような編集をすることができるかは、そのデータ項目がどの項類に属するかによって決まる。表 4-1 データの項類に適用できる編集の種類(言語リファレンスプログラムの定義の章を参照) に下記の拡張が加えられている。

表 6-1: データの項類と施せる編集

項 類
施せる編集
NCHAR なし
NCHAR-EDITED 単に"B", "/", "0" を挿入するだけ

固定挿入編集

"B" (空白) は、1バイト文字データ項目中で使用した場合、半角の空白を表わす。NCHARデータ項目中で使用した場合、全角の空白を表わす。

"/" (スラッシュ)は、 1バイト文字データ項目中で使用した場合、半角のスラッシュを表わす。NCHARデータ項目中で使用した場合、全角のスラッシュを表わす。

"0" (ゼロ) は、1バイト文字データ項目中で使用した場合、半角のゼロを表わす。NCHARデータ項目中で使用した場合、全角のゼロを表わす。

USAGE(用途)句

一般形式

下記の書き方が追加されている。

構文規則

  1. PICTURE文字列には、"N", "B","/", "0" だけを含めることができる。

    PICTURE文字列に"N" が含まれていると、対応する項目の字類は、NCHARまたは日本語とみなされる。

  2. USAGE IS NCHARまたはUSAGE IS JAPANESEと記述した集団項目または基本項目に対しては、BLANK WHEN ZERE句を適用できない。SYNCHRONIZED句は無視される。

一般規則

  1. USAGE IS NCHARまたはUSAGE IS JAPANESE句は、データの形式がNCHARであることを示す。

VALUE(値)句

構文規則

  1. データ記述項において、項目の項類がNCHARであるならば、VALUE句中の定数の項類はNCHARでなければならない。NCHAR定数を使用できるのは、項目の項類がNCHARまたはNCHAR-EDITEDであるときだけである。

    VALUE句中のNCHAR定数の長さは、PICTURE文字列によって指定された大きさを超えてはならない。

手続き部

条件式

条件名

字類がNCHARの定数を含む条件名が、字類がNCHARでない基本項目と共に使用されると、定数は1バイト文字定数とみなされる。

比較条件

字類がNCHARに属するデータ項目および定数を比較条件中に使用し、任意の比較演算子を適用できる。データの変換、編集、逆編集は行われない。項類NCHARの項目と項類NCHAR-EDITEDの項目は、区別されない。

行われる比較は、文字の比較である。2バイト文字集合中の文字の間には、一般に文字の大小順序は付けられない。したがって、2バイト文字を2進数のようにみなして、その文字を表わすビット・パターンの数値に基づいて、文字の大小順序を決定する。

2バイト文字の中に1バイト文字に相当する文字が含まれている場合、2バイト文字の大小順序に従って文字を並べたときに、1バイト文字に相当する文字が1バイト文字の文字の大小順序どおりに並べられる保証はないので注意すること。

ある文字が2バイト文字集合にも1バイト文字集合にも含まれている場合、その2バイト文字と1バイト文字は等しいとはみなされない。

PROGRAM COLLATING SEQUENCE句は、字類がNCHARまたはNCHAR定数のデータ項目の比較に関しては効力がない。

作用対象の長さが等しくない場合、長い方と同じになるまで短い方の後ろに全角の空白を付け加えたものとして、比較が行われる。

字類条件

字類検査にJAPANESEが追加される。この字類検査は、検査対象のデータ項目中のすべての文字が有効な半角の片仮名か2バイト文字であるか、すべてが空白のときに、真となる。

ACCEPT(受取り)文

一般規則

  1. 書き方1において、1バイト文字と2バイト文字の両方のデータを入力できる。1バイト文字データは、2バイト文字データに変換されない。

    書き方1でNCHARデータ項目を受け取る場合、入力されたデータの妥当性検査も変換も文字の桁寄せも行われない。この結果、データが壊れることもあり得る。したがって、この方法は使用しない方がよい。使用する場合は、十分に注意すること。

    書き方4と5では、NCHARデータ項目に入力する文字として、1バイト文字も2バイト文字も有効である。ただし、1バイト文字は、対応する2バイト文字に変換される。

     NCHARデータ項目を受け取る際に、通常の編集機能がすべて文字単位でサポートされている(バックスペース、打ち直し、削除、リストア、重ね打ち、挿入)。


注: 日本語EUCなどの環境では、それに固有の動作が起こる場合がある。


INITIALIZE(初期化)文

一般形式

一般形式が拡張されて、ALPHABETICやALPHANUMERICなどのオプションの他に、NCHARおよびJAPANESEが加えられている。

構文規則

  1. NCHARとJAPANESEは、一緒に指定できない。DBCSまたはNATIONALと一緒にNCHARまたはJAPANESEは指定できない。

一般規則

  1. NCHARまたはJAPANESEを指定すると、項類がNCHARのデータ項目が初期化される。

INSPECT(文字列検査)文

一般規則

  1. 一意名-1の字類がNCHARであるならば、一意名-2に記録される計数は2バイト文字の文字数であって、バイト数ではない。

構文規則

  1. 一意名-2を除くすべての一意名と定数は、そのうちのどれかが字類NCHARの場合、すべて字類NCHARであること。

MOVE(転記)文

字類がNCHARのデータ項目どうしの間、またはデータ項目と定数の間でデータを転記することに係わるすべての文は、下記の2バイト文字の転記に関する一般規則に従う。

受取り側項目の項類 送り出し側項目の項類
英数字 NCHAR NCHAR-EDITED 桁寄せ付きNCHAR
英数字 注を参照 可/G1 可/G4 不可/S2
NCHAR 可/G2 可/G3 可/G4 可/G5
NCHAR-EDITED 不可/S1 不可/S1 不可/S1 不可/S1
桁寄せ付きNCHAR 可/G2 可/G3 可/G4 可/G5


注: この表に字類が英数字のものも含めてあるのは、1バイト文字データ項目の用途を示すためである。 1バイト文字データ項目どうしの転記処理の詳細については、言語リファレンスプログラムの定義の章を参照。 1バイト文字と2バイト文字が混在するデータ項目の転記処理については、上の表と下記の説明を参照。


構文規則

  1. 送出し側のデータ項目の字類は、NCHAR-EDITEDであってはならない。

  2. 受取り側のデータ項目の字類がNCHARであり、JUSTIFIED句が指定されている場合、送出し側のデータ項目の字類はNCHARとする。

一般規則

  1. 送出し側データ項目の字類が英数字または英字であり、受取り側データ項目の字類がNCHARであると、送出し側データ項目中の1バイト文字は、対応する2バイト文字に変換されて受取り側データ項目に転記される。送出し側データ項目中の2バイト文字は、そのまま受取り側データ項目に転記される。

    受取り側データ項目が送出し側データ項目よりも短い場合は、受取り側データ項目に収まりきらないデータ部分は切り捨てられる。受取り側データ項目が送出し側データ項目よりも長い場合は、受取り側データ項目の右側部分に全角の空白が埋められる。

  2. 送出し側データ項目の字類がNCHARであり、受取り側データ項目の字類が英数字であると、送出し側データ項目中の16進値が受取り側データ項目にバイト単位でそのまま転記される。

    受取り側データ項目が送出し側データ項目よりも短い場合は、受取り側データ項目に収まりきらないデータ部分は切り捨てられる。

  3. 受取り側データ項目が送出し側データ項目よりも長い場合は、受取り側データ項目の右側部分に半角の空白が埋められる。

    送出し側データ項目の字類がNCHARであり受取り側データ項目の字類もNCHARであると、送出し側データ項目中の値が受取り側データ項目にバイト単位でそのまま転記される。

  4. 送出し側データ項目の字類が英数字か英字かNCHARであり、受取り側データ項目の項類NCHAR-EDITEDであると、受取り側データ項目上で編集が行われる。

    受取り側データ項目が送出し側データ項目よりも短い場合は、受取り側データ項目に収まりきらないデータ部分は切り捨てられる。受取り側データ項目が送出し側データ項目よりも長い場合は、受取り側データ項目の右側部分に全角の空白が埋められる。

    送出し側データ項目の字類が英数字か英字であると、送出し側データ項目の1バイト文字16進値は対応する2バイト文字に変換されて、受取り側データ項目に転記される。送出し側データ項目中の2バイト文字は、そのまま受取り側データ項目に転記される。

  5. 送出し側データ項目の字類がNCHARであり、受取り側データ項目の字類がJUSTIFIED句付のNCHARであると、送出し側データ項目中の値が受取り側データ項目にバイト単位でそのまま転記される。

    受取り側データ項目にJUSTIFIED句が指定されており、送出し側データ項目の方が受取り側データ項目よりも長い場合は、受取り側データ項目の左側の収まりきらない部分が切り捨てられる。受取り側データ項目にJUSTIFIED句が指定されており、受取り側データ項目が送出し側データ項目よりも長い場合は、データは右側に桁寄せして転記され、受取り側データ項目の左側部分に全角の空白が埋められる。

SEARCH(表引き)文

一般規則

  1. 書き方1において、一意名-1の字類がNCHARである場合、一意名-2に記録される値は2バイト文字で構成される。

STRING(連結)文

一般規則

  1. 一意名-3の字類がNCHARである場合、一意名-4によって示される相対位置は2バイト文字での位置である。

構文規則

  1. 一意名-4を除くすべての一意名と定数は、そのうちのどれかが字類NCHARの場合、すべて字類NCHARであること。

UNSTRING(分解)文

一般規則

  1. 一意名-1の字類がNCHARであるならば、一意名-7によって示される相対位置は2バイト文字での位置であり、一意名-6中に記録される計数は2バイト文字でのものである。

構文規則

  1. 一意名-1, 一意名-2, 一意名-3, 定数-1, 定数-2は、そのうちのどれかが字類NCHARの場合、すべて字類NCHARであること。