V5R3 での変更点
以下に、V5R3 の ILE RPG における機能強化について説明します。
- 新規組み込み関数 %SUBARR:
新規組み込み関数 %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)); - 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 = a pointer to 'abc.' (where . is x'00') // parm5 = 'rst.' を指すポインター (この . は x'00' です) - 63 桁のパック 10 進数値およびゾーン 10 進数
値のサポート
パック・データおよびゾーン・データを 63 桁および小数点以下 63 桁まで定義できます。以前の上限は 31 桁でした。
- I/O の結果データ構造として外部記述されたファイルおよびレコード様式を使用する規則の緩和
- レコード様式に対する I/O のための結果データ構造は、外部記述されたデータ構造にすることができます。
- 命令コード CHAIN、READ、READE、READP、および READPE の外部記述ファイル名に対する I/O の結果フィールドにデータ構造を指定することができます。
- 次のプログラムは、外部記述データ構造を使用してレコード様式への書き込みを行います。
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 でもサポートされています。 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 メソッドが呼び出し元に例外をスローしたりすると、例外の Java トレースが出力されます。デフォルトでは、画面に出力され、読み取れない場合もあります。 ファイルに出力するには、Java オプション os400.stderr を設定します。(これは新規ジョブに対して行う必要があり、 QIBM_RPG_JAVA_PROPERTIES 環境変数を次の値に設定することで行います。'-Dos400.stderr=file:stderr.txt;'
- QIBM_RPG_JAVA_PROPERTIES により、RPG ユーザーは JVM を開始するために使用される Java プロパティーを明示的に設定することができます。
- RPG プリプロセッサーにより、SQL プリプロセッサーにおける条件コンパイルおよびネストした /COPY の処理が可能
RPG コンパイラーは、パラメーター PPGENOPT に *NONE 以外の値を指定して呼び出された場合、RPG プリプロセッサーとして動作します。 この場合、プログラムが生成されるのではなく、新しいソース・ファイルが生成されます。 新しいソース・ファイルには、/DEFINE や /IF などの条件付きコンパイル・ディレクティブが受け入れるオリジナルのソース行が含まれます。 さらに、/COPY ステートメントによって組み込まれたファイルのソース行も含まれ、オプションとして、/INCLUDE ステートメントによって組み込まれたソース行が含まれます。 PPGENOPT(*DFT) または PPGENOPT(*NORMVCOMMENT) が指定された場合、新しいソース・ファイルにはオリジナル・ソース・ファイルからのコメントも含まれます。
SQL プリコンパイラーが新規パラメーター RPGPPOPT に *NONE 以外の値を指定して呼び出されると、SQL プリコンパイラーは /COPY、条件付きコンパイル・ディレクティブ、そしておそらくは /INCLUDE ディレクティブを処理するために、 この RPG プリプロセッサーを使用します。 これにより、SQLRPGLE ソースは、ネストされた /COPY ステートメントおよび条件付きで使用されるステートメントを持つことができます。
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | CCSID(*GRAPH:パラメーター| |
実行時の文字データの扱いを制御するために、 最初のパラメーターとして *CHAR、2 番目のパラメーターとして *JOBRUN を 指定できるようになりました。 |
| 組み込み関数 | %DEC(式 {形式}) | タイプ 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(配列:開始要素 {:要素の数}) | 配列のセクションを返すか、配列のセクションを変更できます。 |