V5R3 で ILE RPG に対して加えられた機能拡張について、以下に記載します。
新規の組み込み関数 %SUBARR を使用すると、副配列を割り当てたり、副配列を値として戻したりすることができます。
既存の %LOOKUP 組み込み関数とともに、この拡張では要素数が変化する動的サイズ変更配列の実装が可能になりました。
%SUBARR(array : start) は、array(start) から配列の末尾までの配列の要素を指定します。
%SUBARR(array : start : num) は、array(start) から array(start + num - 1) までの配列の要素を指定します。
例:
// 配列の一部を別の配列にコピーします。 resultArr = %subarr(array1:start:num); // 配列の一部を別の配列の一部にコピーします。 %subarr(Array1:x:y) = %subarr(Array2:m:n); // 配列の一部をソートします。 sorta %subarr(Array3:x:y); // 配列の一部を合計します。 sum = %xfoot(%subarr(Array4:x:y));
演算項目 2 として %SUBARR が指定されると、%SUBARR 組み込み関数で示された部分配列のみがソートに反映されます。
%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 を使用できるようになりました。 最初のパラメーターとして *CHAR を指定した場合には、2 番目のパラメーターには *JOBRUN を使用しなければなりません。 CCSID(*CHAR : *JOBRUN) は、文字データが実行時に UCS-2 に変換される際の方法を制御します。 CCSID(*CHAR:*JOBRUN) を指定すると、文字データの CCSID がジョブ CCSID にあるものと想定されます。 CCSID(*CHAR : *JOBRUN) を指定しない場合には、文字データの CCSID がジョブ CCSID に関連する 混合バイト CCSID になるものと想定されます。
%TRIM が拡張され、トリミング対象の文字のリストを指定するために、オプションとして 2 番目のパラメーター を使用できるようになりました。
例:
trimchars = '*-.'; data = '***a-b-c-.' result = %trim(data : trimchars); // これで result = 'a-b-c' となり、データの終わりからすべての * - および . が トリミングされました。
プロトタイプ・パラメーターで 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 桁、および小数点以下 63 桁まで指定することができます。 これまでの上限は 31 桁でした。
例:
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
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'; // rec1 を処理します。 elseif recname = 'REC2'; // rec2 を処理します。 endif; read log input; enddo; *inlr = *on; /end-free
この環境変数は、なんらかの RPG プログラムがジョブ内で Java メソッドを呼び出す前に設定する必要があります。
この環境変数には、オプション・ストリングのどこにも使用されない何らかの文字によって区切られ、 終了される、Java オプションが含まれます。 通常は、この文字としてセミコロンを使用することをお勧めします。
例:
1. 1 つのオプションのみを指定する場合: システムのデフォルト JDK が 1.3 であり、RPG プログラムで JDK 1.4 を使用する場合には、 環境変数 QIBM_RPG_JAVA_PROPERTIES を
'-Djava.version=1.4;'に設定します。 1 つのオプションのみを使用する場合であっても、終了文字は必要ですので注意してください。 この例では、セミコロンを使用しています。
2. 複数のオプションを指定する場合: os400.stdout オプションもデフォルト値以外の値に設定したい場合には、 環境変数を次の値に設定することができます。
'-Djava.version=1.4!-Dos400.stdout=file:mystdout.txt!'
この例では、 区切り文字および終了文字として感嘆符を使用しています。 注: このサポートは、PTF が適用された V5R1 および V5R2 でも使用可能です。 PTF は、V5R1 の場合は SI10069、V5R2 の場合は SI10101 です。
この環境変数は、いつでも設定、変更、または除去することができます。
この環境変数に値 'Y' が含まれる場合には、RPG からの Java メソッドの呼び出し時に Java 例外が派生したり、 呼び出された Java メソッドが呼び出し元に対して例外を throw したりした場合に、その例外に関する Java トレースが出力されます。 デフォルトでは、画面に出力されるようになっているため、読み取れない可能性があります。 ファイルに出力させるためには、Java オプション os400.stderr を設定してください。 (これは、新しいジョブで実行する必要があることがあり、QIBM_RPG_JAVA_PROPERTIES 環境変数を
'-Dos400.stderr=file:stderr.txt;'
に設定することによって実行できます。)
パラメーター PPGENOPT に *NONE 以外の値を使用して RPG コンパイラーを呼び出すと、 このコンパイラーは RPG プリプロセッサーとして振る舞うようになります。 この場合、プログラムが生成されるのではなく、新しいソース・ファイルが生成されます。 新規ソース・ファイルには、/DEFINE や /IF などの条件付きコンパイル・ディレクティブによって受け入れられる、 オリジナルのソース行が含まれます。 また、/COPY ステートメントによって組み込まれたファイルから得られたソース行も含まれ、 オプションとして、/INCLUDE ステートメントによって組み込まれたソース行も含まれます。 PPGENOPT(*DFT) また PPGENOPT(*NORMVCOMMENT) が指定されている場合には、 新規ソース・ファイルには、オリジナルのソース・ファイルに入っていたコメントも含まれます。
新規パラメーター RPGPPOPT に *NONE 以外の値を使用して SQL プリコンパイラーを呼び出すと、 プリコンパイラーは、この RPG プリプロセッサーを使用して /COPY、条件付きコンパイル指示、 および場合により /INCLUDE ディレクティブを処理します。 これにより、 ネストされた /COPY ステートメントおよび条件付きで使用されるステートメントを SQLRPGLE ソースに含めることができるようになります。言語単位 | 要素 | 説明 |
制御仕様書キーワード |
CCSID(*GRAPH:パラメーター| *UCS2:数値| *CHAR:*JOBRUN) |
最初のパラメーターとして *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}) | 配列のセクションを戻したり、配列のセクションを変更できるようにしたりします。 |
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.