このリリースの新機能について
この節では、7.3 の ILE RPG における機能強化について説明します。
- 完全自由形式ソースのサポート
- 最初の行に特殊指示 **FREE がある RPG ソースは自由形式コードのみを含みます。
自由形式コードは 1 桁目で始め、行末まで記述できます。
完全自由形式ソースではソース行の長さに事実上制限はありません。
固定形式コードを完全自由形式ソースに含めることはできませんが、6 桁目から 80 桁目までのみを使用する桁制限ソースは、/COPY または /INCLUDE 指示を使用すれば含めることができます。
完全自由形式ステートメントを参照してください。
- 新しい組み込み関数 %SCANR (逆方向走査)
- %SCANR 組み込み関数は %SCAN 組み込み関数と似ていますが、%SCANR は検索引数の最初のオカレンスではなく最後のオカレンスを検出します。
次の例は、%SCAN を使用してストリング内にある "***" の最初のオカレンスを検出し、%SCANR を使用して最後のオカレンスを検出するものです。
string = 'The title is *** Chapter 1 ***.'; p1 = %SCAN ('***' : string); p2 = %SCANR ('***' : string); // p1 = 14 // p2 = 28%SCANR (文字の逆方向走査)を参照してください。
- 組み込み関数 %SCAN の長さパラメーター
- 長さパラメーターを使用して、検索されるソース・ストリングの長さを制限することができます。
次の例では、最初の %SCAN 組み込み関数は 26 を戻します。 2 番目の %SCAN 組み込み関数は 0 を戻します。これは、開始位置 1 および長さ 10 によって示されるサブストリング内では値 "abc" が見つからないためです。
string = 'The alphabet begins with abc.'; p1 = %SCAN ('abc' : string); p2 = %SCAN ('abc' : string : 1 : 10); // p1 = 26 // p2 = 0%SCAN (文字の走査)を参照してください。
- ファイルに対する拡張 ALIAS サポート
- 任意の外部記述ファイルに対して ALIAS キーワードを指定できるようになりました。
修飾されていないグローバル・ファイルに対して ALIAS キーワードが指定されると、RPG プログラム内でフィールドの代替名を使用できるようになります。
次の例では、ファイル MYFILE 内のフィールド REQALC は代替名 REQUIRED_ALLOCATION を持っています。 ALIAS キーワードは、RPG プログラム内におけるこのフィールドの名前が REQUIRED_ALLOCATION になることを示しています。 ALIASを参照してください。
dcl-f myfile ALIAS; read myfile; if required_allocation <> 0 and size > 0; ... - 入出力操作のためのデータ構造に関する緩やかな規則
- 外部記述データ構造またはタイプ *ALL で定義された LIKEREC データ構造は、任意の入出力操作のための結果データ構造として使用できます。
ファイル命令を参照してください。
dcl-f myfile usage(*input : *output : *update); dcl-ds ds extname('MYFILE' : *ALL); read myfile ds; update myfmt ds; write myfmt ds; - 2 番目のパラメーターを含まない LIKEREC を使用して、DISK ファイルのレコード様式に対してデータ構造が定義され、出力バッファーのレイアウトが入力バッファーのレイアウトと一致するときは、そのデータ構造を任意入出力操作のための結果データ構造として使用できます。
dcl-f myfile usage(*input : *output : *update); dcl-ds ds likerec(fmt); read myfile ds; update myfmt ds; write myfmt ds;
- 外部記述データ構造またはタイプ *ALL で定義された LIKEREC データ構造は、任意の入出力操作のための結果データ構造として使用できます。
ファイル命令を参照してください。
- ヌル可能フィールドに関連する機能拡張
- データ構造が EXTNAME または LIKEREC キーワードで定義されたときは、追加の抜き出しタイプとして *NULL をコーディングし、サブフィールドがすべて標識であることを指定することができます。 外部ファイルがデータベース・ファイルであると、結果のデータ構造はそのファイルのヌル・バイト・マップと一致します。 EXTNAME(ファイル名{:形式名}{:*ALL| *INPUT|*OUTPUT|*KEY|*NULL})および LIKEREC(内部レコード名{:*ALL|*INPUT|*OUTPUT|*KEY|*NULL})を参照してください。
- NULLIND キーワードを使用して以下のことを行います。
- フィールドをヌル可能として定義する。
- 独自の標識フィールドを、あるフィールドのヌル標識になるように定義する。
- EXTNAME(*NULL) または LIKEREC(*NULL) で定義される独自の標識データ構造を、別のデータ構造のヌル標識になるように定義する。 NULLIND{(ヌル標識)}を参照してください。
- PCML 機能拡張
- PGMINFO 制御仕様書キーワードの *DCLCASE パラメーターを使用して、プログラム・インターフェース情報内の名前が、RPG ソース・ファイルで定義されている名前と同じ大/小文字の区別で生成されるようにします。 PGMINFO(*PCML | *NO | *DCLCASE { : *MODULE ... } )を参照してください。
- モジュールの作成時にプログラム・インターフェース情報に組み込むプロシージャーに対してプロシージャー仕様書キーワードで PGMINFO(*YES) を指定するか、または、組み込まないプロシージャーに対して PGMINFO(*NO) を指定します。 PGMINFO(*YES | *NO)を参照してください。
- DCLOPT(*NOCHGDSLEN)
- 入力仕様書、出力仕様書、または演算仕様書を使用してデータ構造の長さを変更できないようにするには、DCLOPT(*NOCHGDSLEN) を指定します。 DCLOPT(*NOCHGDSLEN) を指定すると、%SIZE(data-structure) をより自由な形式の宣言で使用することができます。 DCLOPT(*NOCHGDSLENを参照してください。

| 要素 | 説明 |
|---|---|
| PGMINFO キーワード | プログラム・インターフェース情報内の名前を、RPG ソース・ファイル内でコーディングされている名前と同じ大/小文字の区別によって生成するための *DCLCASE パラメーター。 PGMINFO(*PCML | *NO | *DCLCASE { : *MODULE ... } )を参照してください。 |


| 要素 | 説明 |
|---|---|
| EXTNAME キーワード | 抜き出しタイプ *NULL。EXTNAME(ファイル名{:形式名}{:*ALL| *INPUT|*OUTPUT|*KEY|*NULL})を参照してください。 |
| LIKEREC キーワード | 抜き出しタイプ *NULL。LIKEREC(内部レコード名{:*ALL|*INPUT|*OUTPUT|*KEY|*NULL})を参照してください。 |


| 要素 | 説明 |
|---|---|
| %SCAN 組み込み関数 | %SCAN 組み込み関数は、検索する長さを示す 4 番目のパラメーターをサポートするようになりました。 %SCAN (文字の走査)を参照してください。 |


| 要素 | 説明 |
|---|---|
| 特殊指示 **FREE | **FREE は、ソースが 1 桁目からソース行の末尾まで RPG コードを含む完全自由形式であることを示します。 完全自由形式ステートメントを参照してください。 |


| 要素 | 説明 |
|---|---|
| DCLOPT (*NOCHGDSLEN) キーワード | 入力仕様書、出力仕様書、または演算仕様書を使用してデータ構造のサイズを変更することを禁止します。 DCLOPT(*NOCHGDSLENを参照してください。 |


| 要素 | 説明 |
|---|---|
| NULLIND キーワード | ある項目を別の項目のヌル標識として関連付けます。 NULLIND{(ヌル標識)}を参照してください。 |


| 要素 | 説明 |
|---|---|
| PGMINFO キーワード | モジュールの作成時にどのプロシージャーがプログラム・インターフェース情報に記述されたインターフェースを持つかを制御できるようにします。 PGMINFO(*YES | *NO)を参照してください。 |


| 要素 | 説明 |
|---|---|
| %SCANR (逆方向走査) | あるストリングの最後のオカレンスを別のストリング内で見つけます。 %SCANR (文字の逆方向走査)を参照してください。 |

