以下に、V5R4 の ILE RPG における機能強化について説明します。
EVAL-CORR{(EH)} ds1 = ds2
新規命令コード EVAL-CORR は、ソース・データ構造のサブフィールドからのデータおよび NULL 標識をターゲット・データ構造のサブフィールドに割り当てます。 割り当てられるサブフィールドは、両方のデータ構造で同じ名前と互換データ・タイプを持つサブフィールドです。
例えば、データ構造 DS1 が文字サブフィールド A、B、および C を持ち、データ構造 DS2 が文字サブフィールド B、C、および D を持つ場合、ステートメント EVAL-CORR DS1 = DS2; は、サブフィールド DS2.B および DS2.C からのデータを DS1.B および DS1.C に割り当てます。 EVAL-CORR 命令で影響を受けるターゲット・データ構造のヌル可能サブフィールドは、ソース・データ構造のサブフィールドの NULL 標識から割り当てられた NULL 標識も持つか、ソース・サブフィールドがヌル可能でない場合は、*OFF に設定されます。
// DS1 subfields DS2 subfields // s1 character s1 packed // s2 character s2 character // s3 numeric // s4 date s4 date // s5 character EVAL-CORR ds1 = ds2; // This EVAL-CORR operation is equivalent to the following EVAL operations // EVAL ds1.s2 = ds2.s2 // EVAL ds1.s4 = ds2.s4 // Other subfields either appear in only one data structure (S3 and S5) // or have incompatible types (S1).
EVAL-CORR は、外部記述ファイルおよびレコード・フォーマットへの入出力操作の結果のデータ構造を簡単に使用できるようにし、レコード・フォーマットのレイアウトが違うか、サブフィールドのタイプが少し違う場合に、異なるレコード・フォーマットのデータ構造間でのデータの自動転送を可能にします。
%XML (xmldocument { : options } )
%XML 組み込み関数は、XML 文書を記述し、文書が構文解析される方法を制御するオプションを指定します。 xmldocument パラメーターは、文字または UCS-2 式であってもよく、その値は、XML 文書または XML 文書を含む IFS ファイルの名前でもかまいません。 xmldocument パラメーターの値がファイルの名前を持つ場合、"doc=file" オプションを指定する必要があります。
%HANDLER (handlingProcedure : communicationArea )%HANDLER は、イベントまたは一連のイベントを処理するプロシージャーを識別するために使用されます。 %HANDLER は、値を戻さず、 XML-SAX および XML-INTO の第 1 オペランドとしてのみ指定することができます。
第 1 オペランド、handlingProcedure は、処理手順のプロトタイプを指定します。プロトタイプで指定される戻り値およびパラメーターは処理手順に必要なパラメーターに合致する必要があります。要件は、%HANDLER が指定された操作によって決定されます。
第 2 オペランド、communicationArea は、処理手順へのすべての呼び出しでパラメーターとして渡す変数を指定します。参照によって渡されるプロトタイプ・パラメーターの検査に使用される同じ規則に従って、オペランドは処理手順の第 1 プロトタイプ・パラメーターに対して完全一致する必要があります。通信域パラメーターは、配列およびデータ構造を含む、任意のタイプであってかまいません。
XML-SAX{ (e) } %HANDLER(eventHandler : commArea ) %XML(xmldocument { : saxOptions } );
XML-SAX は、%XML 組み込み関数で指定された XML 文書用の SAX 構文解析を開始します。文書の構文解析を開始する XML パーサーを呼び出すことによって、XML-SAX 命令は開始します。 要素の開始の検出、属性名の検索、要素の終了の検出などのイベントをパーサーが発見した場合、パーサーは、イベントを記述するパラメーターと共に eventHandler を呼び出します。commArea オペランドは、パラメーターとして eventHandler に渡される変数であり、XML-SAX 命令コードが処理手順と通信する方法を提供します。eventHandler が戻るときに、パーサーは、次のイベントを見つけて eventHandler を再度呼び出すまで構文解析を継続します。
XML-INTO{ (EH) } variable %XML(xmlDoc { : options }); XML-INTO{ (EH) } %HANDLER(handler : commArea ) %XML(xmlDoc { : options });
XML-INTO は、以下の 2 つの方法のいずれかで XML 文書からデータを読み込みます。
命令を制御するためにさまざまなオプションを指定することができます。
第 1 オペランドは、構文解析されるデータのターゲットを指定します。変数名または % HANDLER 組み込み関数を含むことができます。
第 2 オペランドは、XML 文書のソースおよび文書を構文解析する方法を制御する任意のオプションを指定する %XML 組み込み関数を含みます。XML データを含むか、XML データのロケーションを含むことができます。このオペランドが何を指定するかを示すために、doc オプションを使用します。
// Data structure "copyInfo" has two subfields, "from" // and "to". Each of these subfields has two subfields // "name" and "lib". // File cpyA.xml contains the following XML document // <copyinfo> // <from><name>MASTFILE</name><lib>CUSTLIB</lib></from> // <to><name>MYFILE</name><lib>*LIBL</lib> // <copyinfo> xml-into copyInfo %XML('cpyA.xml' : 'doc=file'); // After the XML-INTO operation, the following // copyInfo.from .name = 'MASTFILE ' .lib = 'CUSTLIB ' // copyInfo.to .name = 'MYFILE ' .lib = '*LIBL '
PREFIX('' : number_of_characters)空の文字リテラル (中断文字なしで指定した 2 つの単一引用符) が「ファイルおよび定義仕様 (File and Definition specifications)」のための PREFIX キーワードの第 1 パラメーターとして指定された場合、指定した文字数がフィールド名から除去されます。例えば、ファイルがフィールド XRNAME、XRIDNUM、 および XRAMOUNT を持っている場合、「ファイル仕様」に PREFIX('':2) を指定すると、内部フィールド名は、NAME、IDNUM、および AMOUNT になります。
ユーザーが、ファイル固有の接頭部以外同じ名前であるサブフィールドを持つ 2 つのファイルを所有している場合、この機能を使用して、そのファイルから定義される外部記述データ構造のサブフィールドの名前から接頭部を除去することができます。 これを使用すると、EVAL-CORR を使用して、1 つのデータ構造からの同じ名前のサブフィールドを他に割り当てることができます。例えば、ファイル FILE1 がフィールド F1NAME を持ち、ファイル FILE2 がフィールド F2NAME を持ち、PREFIX('':2) が外部記述データ構造 DS1 を FILE1 に対して、外部記述データ構造 DS2 を FILE2 に対して指定した場合、サブフィールド F1NAME および F2NAME は両方 NAME になります。 データ構造 DS1 および DS2 間の EVAL-CORR 命令は NAME サブフィールドを割り当てます。
DEBUG { ( *INPUT *DUMP *XMLSAX *NO *YES ) }DEBUG キーワードは、モジュールに生成されるデバッグ援助機能を決定します。*NO および *YES が既存の値です。*INPUT、*DUMP および *XMLSAX によって *YES よりも細分性が提供されます。
===> EVAL _QRNU_NULL_DS > EVAL _QRNU_NULL_DS1 _QRNU_NULL_DS1.FLD1 = '1' _QRNU_NULL_DS1.FLD2 = '0' _QRNU_NULL_DS1.SUB.FLD3 = '1' ===> EVAL _QRNU_NULL_DS.FLD2 _QRNU_NULL_DS1.FLD2 = '0' ===> EVAL _QRNU_NULL_DS.FLD2 = '1' ===> EVAL DSARR(1).FLD2 DSARR(1).FLD2 = 'abcde' ===> EVAL _QRNU_NULL_DSARR(1).FLD2 _QRNU_NULL_DSARR(1).FLD2 = '0'
振る舞いでのこの変更は、リリース V5R2M0 (SI13932) および V5R3M0 (SI14185) の PTF で使用可能です。
言語単位 | 要素 | 説明 |
---|---|---|
制御仕様書キーワード | DEBUG(*INPUT|*DUMP *XMLSAX|*NO|*YES) | 新規パラメーター *INPUT、*DUMP および *XMLSAX は、デバッグ補助機能のためのさらなるオプションを提供します。 |
ファイル仕様書のキーワード | PREFIX('':2) | PREFIX キーワードの第 1 パラメーターとして空のリテラルを指定し、名前の先頭から文字を除去することができます。 |
定義仕様書キーワード | OPTIONS(*NULLIND) | NULL 標識がパラメーターと共に渡されることを示します。 |
PREFIX('':2) | PREFIX キーワードの第 1 パラメーターとして空のリテラルを指定し、名前の先頭から文字を除去することができます。 |
言語単位 | 要素 | 説明 |
---|---|---|
組み込み関数 | %HANDLER(プロトタイプ: パラメーター) | イベント用の処理手順を指定します。 |
%XML(文書{:オプション}) | XML 文書およびそれを構文解析する方法を制御するオプションを指定します。 | |
命令コード | EVAL-CORR | ソース・データ構造のサブフィールドからのデータおよび NULL 標識をターゲット・データ構造のサブフィールドに割り当てます。 |
XML-INTO | XML 文書からのデータをプログラム変数に直接読み込みます。 | |
XML-SAX | XML 文書の SAX 構文解析を開始します。 |
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.