7.2 での変更点
この節では、7.2 で ILE RPG に対して行われた機能強化について説明します。
- 自由形式の制御ステートメント、ファイル・ステートメント、定義ステートメント、およびプロシージャー・ステートメント
- 自由形式の制御ステートメントは CTL-OPT で始まり、セミコロンで終わります。
CTL-OPT OPTION(*SRCSTMT : *NODEBUGIO) ALWNULL(*USRCTL); - 自由形式のファイル定義ステートメントは DCL-F で始まり、セミコロンで終わります。 以下のステートメントは 3 つのファイルを定義します。
- 入力および更新用にオープンされた外部記述 DISK ファイル。
- 入出力用にオープンされた外部記述 WORKSTN ファイル。
- レコード長が 132 のプログラム記述 PRINTER ファイル。
DCL-F custFile usage(*update) extfile(custFilename); DCL-F screen workstn; DCL-F qprint printer(132) oflind(qprintOflow); - 自由形式のデータ定義ステートメントは DCL-C、DCL-DS、DCL-PI、DCL-PR、または DCL-S で始まり、セミコロンで終わります。 以下のステートメントはいくつかの項目を定義します。
- 名前付き固定情報 MAX_ELEMS。
- 独立の可変長文字フィールド fullName。
- 整数サブフィールド num および UCS-2 サブフィールド address を持つ修飾されたデータ構造。
- プロシージャー「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
- 自由形式の制御ステートメントは CTL-OPT で始まり、セミコロンで終わります。
- 英数字データの 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) を使用します。
これによって、一部の日付操作、時刻操作、およびタイム・スタンプ操作のパフォーマンスが向上することがあります。
警告: 妥当性検査ステップをスキップすると、重大なデータ破損の問題が発生する可能性があります。この機能は、日付データ、時刻データ、およびタイム・スタンプ・データが常に有効であることが確かな場合にのみ使用する必要があります。

| 要素 | 説明 |
|---|---|
| CCSID キーワード |
|
| DFTACTGRP キーワード | 自由形式の制御仕様書があり、ACTGRP キーワード、BNDDIR キーワード、または STGMDL キーワードの少なくとも 1 つが使用される場合、DFTACTGRP(*NO) が想定されます。 |
| OPENOPT キーワード | OPENOPT(*{NO}CVT) は、データベース・ファイルの DATA キーワードのデフォルトを制御します。
|


| 要素 | 説明 |
|---|---|
| /FREE ディレクティブおよび /END-FREE ディレクティブ | 自由形式コードの始めと終わりを示すには、これらのディレクティブは不要になりました。これらはコンパイラーによって無視されます。 |


| 要素 | 説明 |
|---|---|
| CCSID キーワード |
|
| DTAARA キーワード | 自由形式の定義内
|
| EXTFLD キーワード | 自由形式のサブフィールド定義内
|
| EXTNAME キーワード | 自由形式のデータ構造定義内
|
| EXPORT キーワードおよび IMPORT キーワード | 自由形式の定義内
|
| EXTPROC キーワード | 自由形式のプロトタイプ定義またはプロシージャー・インターフェース定義内
|
| LIKE キーワード | 自由形式の定義内では、LIKE キーワードには、長さ調整を指定するオプションの 2 番目のパラメーターがあります。 |
| LEN キーワード | 自由形式の定義内では、LEN キーワードはデータ構造定義でのみ許可されます。 その他の自由形式の定義では、長さはデータ・タイプ・キーワードの一部として指定されます。 |
| CLASS キーワード、DATFMT キーワード、PROCPTR キーワード、TIMFMT キーワード、および VARYING キーワード | これらのキーワードは、自由形式の定義では使用されません。 これらのキーワードによって指定される情報は、関連するデータ・タイプ・キーワードの一部として指定されます。 |
| FROMFILE キーワード、PACKEVEN キーワード、および TOFILE キーワード | これらのキーワードは、自由形式の定義では許可されません。 |
| OVERLAY キーワード | パラメーターは、自由形式のサブフィールド定義のデータ構造の名前にすることはできません。代わりに POS キーワードが使用されます。 |


| 要素 | 説明 |
|---|---|
| タイム・スタンプ・リテラル | タイム・スタンプ・リテラルは、0 から 12 までの小数点以下の秒とすることができます。 |


| 要素 | 説明 |
|---|---|
| ファイル・ステートメントおよび定義ステートメント | ファイル・ステートメントおよび定義ステートメントを混在させることができます。 |


| 要素 | 説明 |
|---|---|
| %CHAR | オペランドがタイム・スタンプの場合、返される値の長さは、タイム・スタンプ内のバイト数によって異なります。 *ISO0 形式の場合、バイト数は 14 から 26 までにすることができます。 *ISO 形式の場合、バイト数は 19、または 21 から 32 までにすることができます。 |
| %DEC | オペランドがタイム・スタンプの場合、桁数は、タイム・スタンプ内の小数点以下の秒数に応じて 14 から 26 までにすることができます。 |
| %DIFF | オペランドがタイム・スタンプの場合、オプションの 4 番目のパラメーターは、返す小数点以下の秒数を指定します。 |
| %SECONDS | タイム・スタンプに秒を追加するために %SECONDS が使用される場合、パラメーターには、小数点以下の秒数を指定する小数点以下の桁数を設定することができます。 |
| %SUBDT |
|
| %TIMESTAMP |
|


| 要素 | 説明 |
|---|---|
| 長さ入力 | タイム・スタンプの長さ入力は、19、または 21 から 32 までの値にすることができます。 |
| 小数点以下の桁数の入力 | タイム・スタンプの小数点以下の桁数の入力は、0 から 12 までの値にすることができます。 |


| 要素 | 説明 |
|---|---|
| /SET ディレクティブ | 以下の制御ステートメント・キーワードの新しい値を一時的に設定します。
これらの値は、定義で値が明示的に指定されていない場合に、定義ステートメントのデフォルト値を指定するために使用されます。 |
| /RESTORE ディレクティブ | 以前の設定を、値を設定した最後の /SET ディレクティブより前の値に復元します。
|


| 要素 | 説明 |
|---|---|
| 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 | 自由形式のプロシージャー定義を終了します。 |

| 要素 | 説明 |
|---|---|
| CCSIDCVT(*EXCP | *LIST) | 異なる CCSID を持つデータ間の変換をコンパイラーがどのように処理するかを制御できます。 |
| VALIDATE (*NODATETIME) | 日付データ、時刻データ、およびタイム・スタンプ・データを、使用前に検証する必要があるかどうかを指定します。 |

| 要素 | 説明 |
|---|---|
| DATA(*{NO}CVT) | データベースが英数字フィールドと図形フィールドについてジョブ CCSID との間で CCSID 変換を実行するようにファイルをオープンするかどうかを制御します。 |
| HANDLER(handler {:communication-area}) | ファイルがオープン・アクセス・ファイルであることを指定します。 |
| DISK {(*EXT | record-length)} | 自由形式のファイル定義の装置タイプを指定する装置キーワード。
|
| 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)} | 自由形式のファイル定義でファイルがキー付きであることを示します。 |


| 要素 | 説明 |
|---|---|
| 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™ コンストラクターの戻りの型を定義している場合、パラメーターはオプションです。 |


| 要素 | 説明 |
|---|---|
| EXT | データ構造が外部記述であることを示します。このキーワードは、EXTNAME キーワードがデータ構造定義の最初のキーワードとして指定されている場合はオプションです。 |
| POS(subfield-start-position) | データ構造内でのサブフィールドの開始位置を指定します。 |
| PSDS | データ構造がプログラム状況データ構造であることを指定します。 |

