V5R3 での変更点
以下に、V5R3 の ILE RPG における機能強化について説明します。
- 新規組み込み関数 %SUBARR:
新規組み込み関数 %SUBARR を使用すると、副配列への代入または値として副配列を返すことができます。
既存の %LOOKUP 組み込み関数とともに、この拡張では要素数が変化する動的サイズ変更配列の実装が可能になりました。
%SUBARR(array : start) は、array(start) から配列の末尾までの配列の要素を指定します。
%SUBARR(array : start : num) は、array(start) から array(start + num - 1) までの配列の要素を指定します。
例:
// Copy part of an array to another array: resultArr = %subarr(array1:start:num); // Copy part of an array to part of another array: %subarr(Array1:x:y) = %subarr(Array2:m:n); // 配列の一部をソートします。 sorta %subarr(Array3:x:y); // 配列の一部を合計します。 sum = %xfoot(%subarr(Array4:x:y)); - SORTA 命令コードが拡張され、部分配列のソートが行えるようになりました。
演算項目 2 として %SUBARR が指定されると、%SUBARR 組み込み関数で示された部分配列のみがソートされます。
- %DEC による、date/time/timestamp から数値への直接変換:
%DEC は、最初のパラメーターに日付、時刻またはタイム・スタンプを指定し、 オプションの 2 番目のパラメーターで結果の数値のフォーマットを指定できるように拡張されました。
例:
D numDdMmYy s 6p 0 D date s d datfmt(*jul) date = D'2003-08-21'; numDdMmYy = %dec(date : *dmy); // now numDdMmYy = 210803 - 実行時に文字データを正しく変換するための制御仕様書の CCSID(*CHAR : *JOBRUN):
制御仕様書の CCSID キーワードが拡張され、最初のパラメーターに *CHAR を使用できるようになりました。 最初のパラメーターとして *CHAR を指定した場合には、2 番目のパラメーターには *JOBRUN を使用しなければなりません。 CCSID(*CHAR : *JOBRUN) は、文字データが実行時に UCS-2 に変換される際の方法を制御します。 CCSID(*CHAR:*JOBRUN) を指定すると、文字データがジョブ CCSID のものと想定されます。 CCSID(*CHAR : *JOBRUN) を指定しない場合には、文字データがジョブ CCSID に関連する 混合バイト CCSID のものと想定されます。
- トリミング対象の文字を示す %TRIM、%TRIMR、および %TRIML の 2 番目のパラメーター:
%TRIM が拡張され、トリミング対象の文字のリストを指定するために、オプションとして 2 番目のパラメーター を使用できるようになりました。
例:trimchars = '*-.'; data = '***a-b-c-.' result = %trim(data : trimchars); // now result = 'a-b-c'. All * - and . were trimmed from the ends of the data - トリミングされたパラメーターを渡すための新規プロトタイプ・オプション OPTIONS(*TRIM):
プロトタイプ・パラメーターで OPTIONS(*TRIM) を指定した場合、 渡されたデータの先行ブランクと後書きブランクがトリミングされます。 OPTIONS(*TRIM) は文字、UCS-2 および CONST または VALUE で定義されたグラフィック・パラメーターに対して有効です。 また、OPTIONS(*STRING) を使用して定義されたポインター・パラメーターの場合にも有効です。 OPTIONS(*STRING : *TRIM) が指定されている場合には、 ポインターが呼び出しで渡された場合にも、渡されたデータはトリミングされます。
例:
D proc pr D parm1 5a const options(*trim) D parm2 5a const options(*trim : *rightadj) D parm3 5a const varying options(*trim) D parm4 * value options(*string : *trim) D parm5 * value options(*string : *trim) D ptr s * D data s 10a D fld1 s 5a /free data = ' rst ' + x'00'; ptr = %addr(data); proc (' xyz ' : ' @#$ ' : ' 123 ' : ' abc ' : ptr); // 呼び出されたプロシージャーは以下のパラメーターを受け取ります。 // parm1 = 'xyz ' // parm2 = ' @#$' // parm3 = '123' // parm4 = 'abc.' を指すポインター (この . は x'00' です) // parm5 = 'rst.' を指すポインター (この . は x'00' です) - 63 桁のパックおよびゾーン 10 進値のサポート
パック・データおよびゾーン・データを 63 桁および小数点以下 63 桁まで定義できます。これまでの上限は 31 桁でした。
- I/O の結果データ構造として外部記述されたファイルおよびレコード様式を使用する規則の緩和
- レコード様式への入出力の結果データ構造は、外部記述データ構造にすることができます。
- データ構造は、命令コード CHAIN、READ、READE、READP、および READPE の外部記述ファイル名 への入出力の結果フィールドに指定できます。
- 次のプログラムは、外部記述データ構造を使用してレコード様式への書き込みを行います。
Foutfile o e k disk D outrecDs e ds extname(outfile) prefix(O_) /free O_FLD1 = 'ABCDE'; O_FLD2 = 7; write outrec outrecDs; *inlr = *on; /end-free - 次のプログラムは、複数形式の論理ファイルを読み取り、それぞれのレコード様式のフィールド
を保持する 2 つの重複するサブフィールドを含むデータ構造 INPUT に、そのファイルを書き込みます。
Flog if e k disk infds(infds) D infds ds D recname 261 270 D input ds qualified D rec1 likerec(rec1) overlay(input) D rec2 likerec(rec2) overlay(input) /free read log input; dow not %eof(log); dsply recname; if recname = 'REC1'; // handle rec1 elseif recname = 'REC2'; // rec2 を処理します。 endif; read log input; enddo; *inlr = *on; /end-free
- プログラム/モジュールが共用ファイルに対してキー順次入力操作を実行した結果が EOF 状態になった場合、そのプログラム/モジュールにより後続の順次入力操作が実行されることがあります。 入力要求がデータベースに送信され、入力に使用可能なレコードがある場合、データはプログラム/モジュールに移動され、EOF 状態はオフに設定されます。
- Java™ メソッドを呼び出す RPG プログラムで使用するための新規環境変数のサポート
- QIBM_RPG_JAVA_PROPERTIES を使用すると、RPG ユーザーは、JVM を開始するために
使用される Java プロパティーを明示的に設定することができます。
この環境変数は、なんらかの RPG プログラムがジョブ内で Java メソッドを呼び出す前に設定する必要があります。
この環境変数には、Java オプションが含まれます。 これらのオプションは、どのオプション文字列にも含まれていない何らかの文字によって区切られ、終了します。一般にセミコロンが適切です。
例:
1. 単一のオプションを指定: システムのデフォルトの JDK が 1.3 であり、RPG プログラムで JDK 1.4 を使用する場合は、 環境変数 QIBM_RPG_JAVA_PROPERTIES に次の値を設定します。
1 つのオプションのみを使用する場合であっても、終了文字は必要ですので注意してください。 この例ではセミコロンを使用しています。'-Djava.version=1.4;'2. 複数のオプションを指定する場合: os400.stdout オプションもデフォルト値以外の値に設定したい場合には、 環境変数を次の値に設定することができます。
この例では、 区切り文字および終了文字として感嘆符を使用しています。 注: このサポートは、PTF が適用された V5R1 および V5R2 でも使用可能です。 PTF は、V5R1 の場合は SI10069、V5R2 の場合は SI10101 です。'-Djava.version=1.4!-Dos400.stdout=file:mystdout.txt!' - QIBM_RPG_JAVA_EXCP_TRACE を使用すると、RPG ユーザーは、Java メソッドへの RPG 呼び出しが例外で終了した場合に、
例外トレースを取得することができます。
この環境変数は、いつでも設定、変更、または除去することができます。
この環境変数に値 'Y' が含まれる場合には、RPG からの Java メソッドの呼び出し時に Java 例外が発生したり、 呼び出された Java メソッドが呼び出し元に対して例外を throw したりしたときに、その例外に関する Java トレースが出力されます。デフォルトでは、画面に出力されるようになっているため、読み取れない可能性があります。 ファイルに出力させるためには、Java オプション os400.stderr を設定してください。(これは新規ジョブに対して行う必要があり、 QIBM_RPG_JAVA_PROPERTIES 環境変数を次の値に設定することで行います。'-Dos400.stderr=file:stderr.txt;'
- QIBM_RPG_JAVA_PROPERTIES を使用すると、RPG ユーザーは、JVM を開始するために
使用される Java プロパティーを明示的に設定することができます。
- RPG プリプロセッサーにより、SQL プリプロセッサーにおける条件コンパイルおよびネストした /COPY の処理が可能
パラメーター PPGENOPT に *NONE 以外の値を使用して RPG コンパイラーを呼び出すと、 このコンパイラーは RPG プリプロセッサーとして振る舞うようになります。 この場合、プログラムが生成されるのではなく、新しいソース・ファイルが生成されます。 新規ソース・ファイルには、/DEFINE や /IF などの条件付きコンパイル指示によって受け入れられる、 オリジナルのソース行が含まれます。 また、/COPY ステートメントによって組み込まれたファイルから得られたソース行も含まれ、 オプションとして、/INCLUDE ステートメントによって組み込まれたソース行も含まれます。 PPGENOPT(*DFT) または PPGENOPT(*NORMVCOMMENT) が指定されている場合には、 新規ソース・ファイルに、オリジナルのソース・ファイルからのコメントが含まれます。
新規パラメーター RPGPPOPT に *NONE 以外の値を使用して SQL プリコンパイラーを呼び出すと、 プリコンパイラーは、この RPG プリプロセッサーを使用して /COPY、条件付きコンパイル指示、 および場合により /INCLUDE 指示を処理します。 これにより、 ネストされた /COPY ステートメントおよび条件付きで使用されるステートメントを SQLRPGLE ソースに含めることができるようになります。
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | CCSID(*GRAPH:パラメーター| |
最初のパラメーターとして *CHAR を、2 番目のパラメーターとして *JOBRUN を使用して、 実行時に文字データをどのように扱うのかを制御できるようになりました。 |
| 組み込み関数 | %DEC(expression {format}) | タイプ Date、Time または Timestamp のパラメーターを使用できるようになりました。 |
| %TRIM(式:式) | トリミングする文字のセットを示す 2 番目のパラメ ーターを指定できるようになりました。 | |
| 定義仕様書キーワード | OPTIONS(*TRIM) | 渡されるパラメーターからブランクをトリミングすることを指示します。 |
| 定義仕様書 | 長さと小数部の桁数入力 | パック・フィールドおよびゾーン・フィールドでは、長さおよび小数点以下の桁数として 63 桁まで指定できます。 |
| 入力仕様 | 長さ入力 | パック・フィールドの長さとして 32 まで、ゾーン・フィールドの長さとして 63 まで指定できます。 |
| 小数部の桁数入力 | パック・フィールドおよびゾーン・フィールドのフィールドの場合、少数位の桁数は 63 桁まで可能になりました。 | |
| 演算仕様書 | 長さと小数部の桁数入力 | パック・フィールドおよびゾーン・フィールドでは、長さおよび小数点以下の桁数として 63 桁まで指定できます。 |
| CHAIN、READ、READE、 READP、および READPE 命令 | 演算項目 2 が外部記述ファイルの名前である場合、データ構造を結果フィールドに指定することができます。 | |
| CHAIN、READ、READC、 READE、READP、READPE、 WRITE、UPDATE 命令 | 演算項目 2 が外部記述レコード様式の名前である場合、 外部記述データ構造を結果フィールドに指定することができます。 | |
| SORTA 命令 | 演算項目 2 が拡張され、%SUBARR を指定できるようになりました。 |
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 組み込み関数 | %SUBARR(array:starting element {:number of elements}) | 配列のセクションを戻したり、配列のセクションを変更できるようにしたりします。 |