変更の始まり

7.2 での変更点

この節では、7.2 で ILE RPG に対して行われた機能強化について説明します。

自由形式の制御ステートメント、ファイル・ステートメント、定義ステートメント、およびプロシージャー・ステートメント
  • 自由形式の制御ステートメントは CTL-OPT で始まり、セミコロンで終わります。
     CTL-OPT OPTION(*SRCSTMT : *NODEBUGIO)
             ALWNULL(*USRCTL);
  • 自由形式のファイル定義ステートメントは DCL-F で始まり、セミコロンで終わります。
    以下のステートメントは 3 つのファイルを定義します。
    1. 入力および更新用にオープンされた外部記述 DISK ファイル。
    2. 入出力用にオープンされた外部記述 WORKSTN ファイル。
    3. レコード長が 132 のプログラム記述 PRINTER ファイル。
     DCL-F custFile usage(*update) extfile(custFilename);
     DCL-F screen workstn;
     DCL-F qprint printer(132) oflind(qprintOflow);
  • 自由形式のデータ定義ステートメントは DCL-CDCL-DSDCL-PIDCL-PR、または DCL-S で始まり、セミコロンで終わります。
    以下のステートメントはいくつかの項目を定義します。
    1. 名前付き固定情報 MAX_ELEMS
    2. 独立の可変長文字フィールド fullName
    3. 整数サブフィールド num および UCS-2 サブフィールド address を持つ修飾されたデータ構造。
    4. プロシージャー「Qp0lRenameUnlink」のプロトタイプ。
     DCL-C MAX_ELEMS 1000;
     DCL-S fullName VARCHAR(50)
                    INZ('Unknown name');
     DCL-DS ds1 QUALIFIED;
       num INT(10);
       address UCS2(100);
     END-DS;
     DCL-PR Qp0lRenameUnlink INT(10) EXTPROC(*DCLCASE);
        oldName POINTER VALUE OPTIONS(*STRING);
        newName POINTER VALUE OPTIONS(*STRING);
     END-PR;
  • 自由形式のプロシージャー定義ステートメントは DCL-PROC で始まり、セミコロンで終わります。END-PROC ステートメントは、プロシージャーを終了するために使用されます。

    以下に、自由形式のサブプロシージャー定義の例を示します。

     DCL-PROC getCurrentUserName EXPORT;
        DCL-PI *n CHAR(10) END-PI;
        DCL-S curUser CHAR(10) INZ(*USER);
    
        RETURN curUser;
     END-PROC; 
  • /FREE ディレクティブと /END-FREE ディレクティブは不要になりました。コンパイラーはこれらを無視します。
  • 自由形式ステートメントと固定形式ステートメントを混在させることができます。
             IF endDate < beginDate;
    C                   GOTO      internalError
             ENDIF;
             duration = %DIFF(endDate : beginDate : *days);
             . . .
    C     internalError TAG
英数字データの CCSID サポート
  • モジュールのデフォルトの英数字 CCSID は、UTF-8 および 16 進数を含むさらに多くの CCSID に設定することができます。
  • CCSID を使用して英数字データを定義することができます。サポートされる CCSID には以下のものが含まれます。
    • 1 バイトおよび混合バイトの EBCDIC CCSID
    • 1 バイトおよび混合バイトの ASCII CCSID
    • UTF-8
    • 16 進数
外部英数字サブフィールドの CCSID
英数字サブフィールドにはファイル内のフィールドと同じ CCSID が必要であることを示すには、外部記述データ構造に CCSID(*EXACT) を使用します。
16 進データでは CCSID 変換は実行されない
16 進データの暗黙的な変換または明示的な変換では、CCSID 変換は許可されません。
16 進データには、以下のものが含まれます。
  • 16 進数リテラル
  • CCSID(*HEX) を使用して定義された英数字データおよび図形データ
  • ファイルで DATA キーワードが有効になっていて、ファイル内のフィールドの CCSID が 65535 である場合は、外部記述ファイルのバッファー内にある英数字データおよび図形データ
  • ファイル内のフィールドの CCSID が 65535 である場合は、CCSID(*EXACT) を使用して定義された外部記述データ構造内にある英数字データおよび図形データ
連結の暗黙的な変換
コンパイラーは、連結式で英数字データ、図形データ、および UCS-2 データの間の暗黙的な変換を実行します。
ジョブ CCSID への変換を行わずにデータベース・ファイルをオープンする
入出力命令で英数字データと図形データがジョブ CCSID との間で変換されない状態でのデータベース・ファイルのオープンを指定するには、制御キーワード OPENOPT(*NOCVTDATA) またはファイル・キーワード DATA(*NOCVT) を使用します。
デフォルトの CCSID、日付の形式、または時刻の形式を一時的に変更する
日付の形式、時刻の形式、および CCSID のデフォルト値を設定するには、/SET ディレクティブと /RESTORE ディレクティブを使用します。
%SUBDT によって返される長さを制御する
%SUBDT のオプションの 3 番目のパラメーターを使用すると、結果での桁数を指定することができます。 例えば、年の値を 4 桁の値で返すことができます (%SUBDT(MyDate:*YEARS:4))。
タイム・スタンプ・データの精度の向上
タイム・スタンプ・データは、0 から 12 までの小数点以下の秒とすることができます。
オープン・アクセス・ファイル
オープン・アクセス・ファイルは、そのすべての操作がオペレーティング・システムではなくユーザー作成プログラムまたはプロシージャーによって処理されるファイルです。このプログラムまたはプロシージャーは、「オープン・アクセス・ハンドラー」または単に「ハンドラー」と呼ばれます。HANDLER キーワードはハンドラーを指定します。
新規の XML-INTO オプション
  • XML 名前空間は、「ns」オプションと「nsprefix」オプションによってサポートされます。
  • サブフィールド名で RPG によってサポートされない文字が含まれる XML 名は、「case=convert」オプションによってサポートされます。
ソース文字がターゲット文字セットに存在しない場合にデータが失われる CCSID 変換のサポート
制御仕様書キーワード CCSIDCVT(*EXCP : *LIST)。
  • ターゲット文字セット内に一致がないソース文字が原因で CCSID 変換によってデータが失われた場合に例外を出すには、CCSIDCVT(*EXCP) を使用します。
  • 変換によってデータが失われる可能性があるかどうかを示す診断メッセージとともに、モジュール内のすべての CCSID 変換のリストを取得するには、CCSIDCVT(*LIST) を使用します。
日付データ、時刻データ、およびタイム・スタンプ・データでの作業時に RPG コンパイラーが妥当性検査ステップをスキップできるようにする VALIDATE(*NODATETIME)

RPG コンパイラーが妥当性検査を実行せずに日付データ、時刻データ、およびタイム・スタンプ・データを文字データとして処理できるようにするには、制御仕様書キーワード VALIDATE(*NODATETIME) を使用します。

これによって、一部の日付操作、時刻操作、およびタイム・スタンプ操作のパフォーマンスが向上することがあります。

警告: 妥当性検査ステップをスキップすると、重大なデータ破損の問題が発生する可能性があります。この機能は、日付データ、時刻データ、およびタイム・スタンプ・データが常に有効であることが確かな場合にのみ使用する必要があります。
変更の始まり
表 1. 7.2 で変更された言語要素: 制御仕様書キーワード
要素 説明
CCSID キーワード
  • CCSID(*EXACT) は、モジュール内にあるすべての英数字データの CCSID に注意するようコンパイラーに指示します。
    • 英数字リテラルと図形リテラルには、ソース・ファイルの CCSID があります。
    • 英数字データには常に CCSID があるとみなされます。

    CCSID(*EXACT) が指定されていない場合、RPG コンパイラーは、データベース・ファイルのリテラル、変数、または入力バッファーと出力バッファー内のデータの CCSID に関して誤った想定を立てることがあります。

  • CCSID(*CHAR:ccsid) では、*HEX、*JOBRUNMIX、*UTF8、ASCII CCSID、および EBCDIC CCSID がサポートされます。
  • CCSID(*GRAPH:ccsid) では、*HEX、*JOBRUN がサポートされます。
  • CCSID(*UCS2:ccsid) では、*UTF16 がサポートされます。
DFTACTGRP キーワード 自由形式の制御仕様書があり、ACTGRP キーワード、BNDDIR キーワード、または STGMDL キーワードの少なくとも 1 つが使用される場合、DFTACTGRP(*NO) が想定されます。
OPENOPT キーワード OPENOPT(*{NO}CVT) は、データベース・ファイルの DATA キーワードのデフォルトを制御します。
  • OPENOPT(*CVTDATA) は、ファイルの DATA キーワードが指定されていない場合に、DISK ファイルと SEQ ファイルに対して DATA(*CVT) を想定することを示します。
  • OPENOPT(*NOCVTDATA) は、ファイルの DATA キーワードが指定されていない場合に、DISK ファイルと SEQ ファイルに対して DATA(*NOCVT) を想定することを示します。
を参照してください。
変更の終わり
変更の始まり
表 2. 7.2 で変更された言語要素: ディレクティブ
要素 説明
/FREE ディレクティブおよび /END-FREE ディレクティブ 自由形式コードの始めと終わりを示すには、これらのディレクティブは不要になりました。これらはコンパイラーによって無視されます。
変更の終わり
変更の始まり
表 3. 7.2 で変更された言語要素: 定義仕様書キーワード
要素 説明
CCSID キーワード
  • 英数字データでサポートされます。
  • 英数字サブフィールドの CCSID を制御するために、外部記述データ構造でサポートされます。
  • パラメーターは、グラフィック・データの場合 *HEX および *JOBRUN になります。
  • パラメーターは、UCS-2 データの場合 *UTF16 になります。
DTAARA キーワード 自由形式の定義内
  • *VAR は使用されません。名前が引用符なしで指定されている場合、変数または名前付き固定情報の名前であると想定されます。
  • データ構造の場合、これがデータ域データ構造であることを指定するために *AUTO が使用されます。IN 命令、OUT 命令、および UNLOCK 命令を使用してデータ域を操作できることを指定するには、*USRCTL が使用されます。
EXTFLD キーワード 自由形式のサブフィールド定義内
  • パラメーターはオプションです。
  • パラメーターが引用符なしで指定されている場合、以前に定義された名前付き固定情報の名前であると想定されます。
EXTNAME キーワード 自由形式のデータ構造定義内
  • file-name パラメーターまたは format-name パラメーターが引用符なしで指定されている場合、以前に定義された名前付き固定情報の名前であると想定されます。
EXPORT キーワードおよび IMPORT キーワード 自由形式の定義内
  • 外部名が、独立フィールドまたはデータ構造の指定方法と同じ (同じ大/小文字混合) であることを示す *DCLCASE を外部名に指定することができます。
EXTPROC キーワード 自由形式のプロトタイプ定義またはプロシージャー・インターフェース定義内
  • 外部名が、プロトタイプまたはプロシージャー・インターフェースの指定方法と同じ (同じ大/小文字混合) であることを示す *DCLCASE を外部プロシージャーまたはメソッド名に指定することができます。
  • プロシージャー・インターフェース名が *N と指定されている場合、外部名は DCL-PROC ステートメントから取得されます。
LIKE キーワード 自由形式の定義内では、LIKE キーワードには、長さ調整を指定するオプションの 2 番目のパラメーターがあります。
LEN キーワード 自由形式の定義内では、LEN キーワードはデータ構造定義でのみ許可されます。 その他の自由形式の定義では、長さはデータ・タイプ・キーワードの一部として指定されます。
CLASS キーワード、DATFMT キーワード、PROCPTR キーワード、TIMFMT キーワード、および VARYING キーワード これらのキーワードは、自由形式の定義では使用されません。 これらのキーワードによって指定される情報は、関連するデータ・タイプ・キーワードの一部として指定されます。
FROMFILE キーワード、PACKEVEN キーワード、および TOFILE キーワード これらのキーワードは、自由形式の定義では許可されません。
OVERLAY キーワード パラメーターは、自由形式のサブフィールド定義のデータ構造の名前にすることはできません。代わりに POS キーワードが使用されます。
変更の終わり
変更の始まり
表 4. 7.2 で変更された言語要素: リテラル
要素 説明
タイム・スタンプ・リテラル タイム・スタンプ・リテラルは、0 から 12 までの小数点以下の秒とすることができます。
変更の終わり
変更の始まり
表 5. 7.2 で変更された言語要素: ステートメントの順序
要素 説明
ファイル・ステートメントおよび定義ステートメント ファイル・ステートメントおよび定義ステートメントを混在させることができます。
変更の終わり
変更の始まり
表 6. 7.2 で変更された言語要素: 組み込み関数
要素 説明
%CHAR オペランドがタイム・スタンプの場合、返される値の長さは、タイム・スタンプ内のバイト数によって異なります。 *ISO0 形式の場合、バイト数は 14 から 26 までにすることができます。 *ISO 形式の場合、バイト数は 19、または 21 から 32 までにすることができます。
%DEC オペランドがタイム・スタンプの場合、桁数は、タイム・スタンプ内の小数点以下の秒数に応じて 14 から 26 までにすることができます。
%DIFF オペランドがタイム・スタンプの場合、オプションの 4 番目のパラメーターは、返す小数点以下の秒数を指定します。
%SECONDS タイム・スタンプに秒を追加するために %SECONDS が使用される場合、パラメーターには、小数点以下の秒数を指定する小数点以下の桁数を設定することができます。
%SUBDT
  • オプションの 3 番目のパラメーターは、結果での桁数を指定します。
  • 第 1 オペランドがタイム・スタンプで、第 2 オペランドが *SECONDS の場合、オプションの第 4 オペランドは、結果での小数点以下の秒数を示します。
%TIMESTAMP
  • 最初のパラメーターはタイム・スタンプにできます。
  • 最初のパラメーターは *SYS にできます。
  • 最初のパラメーターが日付、タイム・スタンプ、または *SYS の場合、2 番目のオプション・パラメーターは、小数点以下の秒数を示す 0 から 12 までの値にすることができます。
  • 最初のパラメーターが文字または数字の場合、3 番目のオプション・パラメーターは、小数点以下の秒数を示す 0 から 12 までの値にすることができます。
変更の終わり
変更の始まり
表 7. 7.2 で変更された言語要素: 固定形式の定義仕様書
要素 説明
長さ入力 タイム・スタンプの長さ入力は、19、または 21 から 32 までの値にすることができます。
小数点以下の桁数の入力 タイム・スタンプの小数点以下の桁数の入力は、0 から 12 までの値にすることができます。
変更の終わり
変更の始まり
表 8. 7.2 の新しい言語要素: ディレクティブ
要素 説明
/SET ディレクティブ 以下の制御ステートメント・キーワードの新しい値を一時的に設定します。
  • CCSID(*CHAR:ccsid)
  • CCSID(*GRAPH:ccsid)
  • CCSID(*UCS2:ccsid)
  • DATFMT(format)
  • TIMFMT(format)

これらの値は、定義で値が明示的に指定されていない場合に、定義ステートメントのデフォルト値を指定するために使用されます。

/RESTORE ディレクティブ 以前の設定を、値を設定した最後の /SET ディレクティブより前の値に復元します。
  • CCSID(*CHAR)
  • CCSID(*GRAPH)
  • CCSID(*UCS2)
  • DATFMT
  • TIMFMT
変更の終わり
変更の始まり
表 9. 7.2 の新しい言語要素: 自由形式ステートメント
要素 説明
CTL-OPT 自由形式の制御ステートメントを開始します。
DCL-F 自由形式のファイル定義を開始します。
DCL-C 自由形式の名前付き固定情報定義を開始します。
DCL-DS 自由形式のデータ構造定義を開始します。
DCL-SUBF 自由形式のサブフィールド定義を開始します。サブフィールド名が自由形式の計算で許可される命令コードと同じである場合を除き、「DCL-SUBF」の指定はオプションです。
END-DS 自由形式のデータ構造定義を終了します。 サブフィールドがない場合、これは、DCL-DS ステートメントの最後のキーワードの後で指定できます。
DCL-PI 自由形式のプロシージャー・インターフェース定義を開始します。
DCL-PR 自由形式のプロトタイプ定義を開始します。
DCL-PARM 自由形式のパラメーター定義を開始します。パラメーター名が自由形式の計算で許可される命令コードと同じである場合を除き、「DCL-PARM」の指定はオプションです。.
END-PI 自由形式のプロシージャー・インターフェース定義を終了します。 パラメーターがない場合、これは、DCL-PI ステートメントの最後のキーワードの後で指定できます。
END-PR 自由形式のプロトタイプ定義を終了します。 パラメーターがない場合、これは、DCL-PR ステートメントの最後のキーワードの後で指定できます。
DCL-S 自由形式の独立フィールド定義を開始します。
DCL-PROC 自由形式のプロシージャー定義を開始します。
END-PROC 自由形式のプロシージャー定義を終了します。
変更の終わり
表 10. 7.2 の新しい言語要素: 制御仕様書キーワード
要素 説明
CCSIDCVT(*EXCP | *LIST) 異なる CCSID を持つデータ間の変換をコンパイラーがどのように処理するかを制御できます。
VALIDATE (*NODATETIME) 日付データ、時刻データ、およびタイム・スタンプ・データを、使用前に検証する必要があるかどうかを指定します。
変更の始まり
表 11. 7.2 の新しい言語要素: ファイル定義キーワード
要素 説明
DATA(*{NO}CVT) データベースが英数字フィールドと図形フィールドについてジョブ CCSID との間で CCSID 変換を実行するようにファイルをオープンするかどうかを制御します。
HANDLER(handler {:communication-area}) ファイルがオープン・アクセス・ファイルであることを指定します。
DISK {(*EXT | record-length)} 自由形式のファイル定義の装置タイプを指定する装置キーワード。
  • デフォルトの装置タイプは DISK です。
  • 各装置タイプ・キーワードのデフォルト・パラメーターは、これが外部記述ファイルであることを示す *EXT です。
PRINTER {(*EXT | record-length)}
SEQ {(*EXT | record-length)}
SPECIAL {(*EXT | record-length)}
WORKSTN {(*EXT | record-length)}
USAGE(*INPUT *OUTPUT *UPDATE *DELETE) 自由形式のファイル定義におけるファイルの使用法を指定します。
KEYED {(*CHAR : key-length)} 自由形式のファイル定義でファイルがキー付きであることを示します。
変更の終わり
変更の始まり
表 12. 7.2 の新しい言語要素: 自由形式のデータ・タイプ・キーワード
要素 説明
CHAR(length) 固定長の英数字データ・タイプ
VARCHAR(length {:prefix-size}) 可変長の英数字データ・タイプ
GRAPH(length) 固定長の図形データ・タイプ
VARGRAPH(length {:prefix-size}) 可変長の図形データ・タイプ
UCS2(length) 固定長の UCS-2 データ・タイプ
VARUCS2(length {:prefix-size}) 可変長の UCS-2 データ・タイプ
IND 標識データ・タイプ
INT(digits) 整数データ・タイプ
UNS(digits) 符号なし整数データ・タイプ
PACKED(digits {:decimals}) パック 10 進数データ・タイプ
ZONED(digits {:decimals}) ゾーン 10 進数データ・タイプ
BINDEC(digits {:decimals}) 2 進 10 進数データ・タイプ
FLOAT(size) 浮動データ・タイプ
DATE {(format)} 日付データ・タイプ
TIME {(format)} 時刻データ・タイプ
TIMESTAMP {(fractional seconds)} タイム・スタンプ・データ・タイプ
POINTER {(*PROC)} ポインター・データ・タイプ。オプション・パラメーター *PROC は、これがプロシージャー・ポインターであることを示します。
OBJECT {(*JAVA : class-name)} オブジェクト・データ・タイプ。これが Java™ コンストラクターの戻りの型を定義している場合、パラメーターはオプションです。
変更の終わり
変更の始まり
表 13. 7.2 の新しい言語要素: 自由形式のデータ定義キーワード
要素 説明
EXT データ構造が外部記述であることを示します。このキーワードは、EXTNAME キーワードがデータ構造定義の最初のキーワードとして指定されている場合はオプションです。
POS(subfield-start-position) データ構造内でのサブフィールドの開始位置を指定します。
PSDS データ構造がプログラム状況データ構造であることを指定します。
変更の終わり
変更の終わり