以下に、V5R3 の ILE RPG における機能強化について説明します。
新規組み込み関数 %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));
演算項目 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(*CHAR : *JOBRUN) を指定しない場合には、文字データがジョブ CCSID に関連する 混合バイト CCSID のものと想定されます。
%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) は文字、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';
// handle rec1
elseif recname = 'REC2';
// rec2 を処理します。
endif;
read log input;
enddo;
*inlr = *on;
/end-free
この環境変数は、なんらかの RPG プログラムがジョブ内で Java メソッドを呼び出す前に設定する必要があります。
この環境変数には、Java オプションが含まれます。 これらのオプションは、どのオプション文字列にも含まれていない何らかの文字によって区切られ、終了します。一般にセミコロンが適切です。
例:
1. 単一のオプションを指定: システムのデフォルトの JDK が 1.3 であり、RPG プログラムで JDK 1.4 を使用する場合は、 環境変数 QIBM_RPG_JAVA_PROPERTIES に次の値を設定します。
'-Djava.version=1.4;'
1 つのオプションのみを使用する場合であっても、終了文字は必要ですので注意してください。
この例ではセミコロンを使用しています。
'-Djava.version=1.4!-Dos400.stdout=file:mystdout.txt!'
この例では、
区切り文字および終了文字として感嘆符を使用しています。
注: このサポートは、PTF が適用された V5R1 および V5R2 でも使用可能です。
PTF は、V5R1 の場合は SI10069、V5R2 の場合は SI10101 です。 この環境変数は、いつでも設定、変更、または除去することができます。
'-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:パラメーター| |
最初のパラメーターとして *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}) | 配列のセクションを戻したり、配列のセクションを変更できるようにしたりします。 |