Rational Developer for System z バージョン 7.6.1

エラー・フィードバック XML ファイルを生成するための COBOL スニペット

以下の COBOL プログラム・スニペットは、独自のプリプロセッサーを作成する際に役立つ可能性のある、いくつかのトピックを示しています。

このスニペットは、プリプロセッサーの入力ファイル用ファイル変数をセットアップします。 SYSIN は、入力変数として使用されます。デフォルトで、呼び出しに対して JCL が生成されたときに、Rational® Developer for System z® によって SYSIN 変数が設定されます。 SYSXMLSD、および SYSOUT に対するファイル変数も宣言されます。

このスニペットの PERFORM Extract-DDDSN ステートメントによって、DYNQUERY を呼び出すパラグラフが実行されます。DYNQUERY の出力は、ZFLDATA の出力と類似しています。処理は異なり、出力はアセンブラーに書き込まれます。 ご使用のサイトに C コンパイラーがなく、高水準アセンブラーがある場合、DD 名からデータ・セット名を取得するために、プリプロセッサーから DYNQUERY を呼び出すように決定する場合があります。

PERFORM Write-xml-line ステートメントは、UTF-8 で XML ファイルの行を書き込むパラグラフを実行します。XML ファイルを UTF-8 で作成する場合、プロパティー・グループ・エディターにプリプロセッサー用の新規ステップを追加するときに、「コンパイラー・エラーのデータ・セット修飾子」入力フィールドに、修飾子の 1 つとして ERRWDZ を必ず含めるようにしてください。

       Identification DIVISION.
         Program-ID. MPREPROC.
       Environment DIVISION.
        Input-output section.
         File-control.
           Select in-file
               Assign to SYSIN
      *         Organization is line sequential
               File status is in-file-status.
           Select out-file
               Assign to outfile
      *         Organization is line sequential
               File status is out-file-status.
           Select xml-file
               Assign to SYSXMLSD
      *         Organization is line sequential
               File status is xml-file-status.
       Data Division.
        File section.
        Fd in-file
             label records are standard
      *       recording mode is f
             record contains 80 characters
             block contains 0 records
             data record is Input-data.
        01 Input-data pic x(80).
        Fd out-file
             label records are standard
      *       recording mode is f
             record contains 80 characters
             block contains 0 records
             data record is output-data.
        01 output-data pic x(80).
        Fd xml-file
             label records are standard
      *       recording mode is v
      *      16383 - word for storing the record length
             record varying from 1 to 16379 characters
               DEPENDING ON xml-length
             block contains 0 records
             data record is xml-data.
        01 xml-data pic x(16379).
      *
      *  To run this, use a ddname
      *  //OUTFILE DD DSN=[DATASET](MEMBER),DISP=SHR
      *
       Working-Storage Section.
        01 Source-name pic x(54).
        01 Target-name pic x(54).
        01 Reverse-data pic x(16379).
        01 Temp-data pic x(16379).
        01 Nat-data pic n(16379) USAGE National.
        01 Num-chars pic 99999.
        01 xml-length pic 9(5).
        01 Program-flags.
          05 in-file-status pic xx value "00".
            88 inputfile-success value "00".
          05 out-file-status pic xx value "00".
            88 outputfile-success value "00".
          05 xml-file-status pic xx value "00".
            88 xmlfile-success value "00".
          05 In-file-count pic 999.
          05 Out-file-count pic 999.
          05 Input-eof pic x value " ".
          05 line-cursor pic 99999.
          05 line-cursor-end pic 99999.

          =================
          =================
          =================
        01 ddname-routine-data.
          05 ddname pic x(8).
          05 dsn pic x(54).
          05 spacestart pic 99.
          05 spaceend pic 99.
          =================
          =================
          =================
       Procedure DIVISION .
        mainline SECTION.
          =================
          =================
          =================
           PERFORM Extract-dsnnames
      * Open the input and output files
           OPEN INPUT in-file
           if not inputfile-success
             display 'Error opening input file ' in-file-status
             stop run
           end-if
           OPEN OUTPUT out-file
           if not outputfile-success
             display 'Error opening output file ' out-file-status
             stop run
           end-if
           OPEN OUTPUT xml-file
           if not xmlfile-success
             display 'Error opening xml file ' xml-file-status
             stop run
           end-if
          =================
          =================
          =================
           Perform until Input-eof IS EQUAL TO "1"
          =================
          =================
          =================
               READ in-file into Temp-data at end move "1" to Input-eof
               END-READ
               IF Input-eof IS EQUAL TO "0"
                 PERFORM Process-line
               End-IF
           End-perform.
          =================
          =================
          =================
           PERFORM Generate-xml-end-package
           goback
           .
      * Output: Source-name, Target-name
        Extract-dsnnames.
           MOVE SPACES to ddname
           MOVE "SYSIN" to ddname
           PERFORM Extract-DDDSN
           MOVE SPACES to Source-name
           MOVE dsn to Source-name
           MOVE SPACES to ddname
           MOVE "OUTFILE" to ddname
           PERFORM Extract-DDDSN
           MOVE SPACES to Target-name
           MOVE dsn to Target-name
           .
      * Input: DDNAME
      * Output: DSN
        Extract-DDDSN.
           MOVE SPACES TO dsn
           CALL "DYNQUERY" USING DDNAME, DSN.
           IF RETURN-CODE > 0 THEN
             DISPLAY "Error retrieving DSN for DDNAME " DDNAME
             DISPLAY "Return Code = " RETURN-CODE
             EVALUATE RETURN-CODE
               WHEN 1080
                 DISPLAY "DD for " DDNAME " was not found"
                 STOP RUN
               WHEN OTHER
                 STOP RUN
             END-EVALUATE
           END-IF
           PERFORM Remove-DSN-Spaces
          =================
          =================
          =================
        Generate-xml-end-package.
           MOVE SPACES TO Temp-data
           MOVE end-package TO Temp-data
           PERFORM Write-xml-line
          =================
          =================
          =================


        Write-xml-line.
      *    Assume text to be written to xml-file is in Temp-data
      *    Convert text to UTF-8 text
           Move Temp-data to Nat-data
           Move Function Display-of(Nat-data, 01208)
             to xml-data
      *    Calculate length of UTF-8 text
           Move Function Reverse(Temp-data) to Reverse-data
           Move 0 to Num-chars
           INSPECT Function Reverse(Temp-data)
             TALLYING Num-chars FOR LEADING SPACES
           Compute Num-chars = Function Length(Temp-data) - Num-chars
           Compute xml-length = Function LENGTH(
             Function Display-of(Nat-data(1:Num-chars),
                                 01208)
           )
           WRITE xml-data
           .
       End program MPREPROC.

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)