メンバー・レコードの取得

メンバー内のすべてのレコードを抽出するため、File Manager は最初に GetFirstMemberRecord 呼び出しを実行し、次に複数の GetNextMemberRecord 呼び出しを実行します。レコードがある場合は、rc=0 になります。この処理は、ファイルの終わり (RAM-RC-EOF) 戻りコードを出して、いつでも正常に終了することができます。

GetFirstMemberRecord 呼び出しには、パラメーターとしてメンバー名が必要です。これは、以下のようにして渡されます。

01 MEMBER-ID-SPEC.
    05 SOFTWARE-VERSION PIC 9(4) BINARY.
    05 MEM-ID-SPEC-COLL-PTR POINTER.
01 MEM-ID-SPEC-COLL.
    05 SOFTWARE-VERSION PIC 9(4) BINARY.
    05 MEM-ID-COMPONENT-COUNT PIC 9(4) BINARY.
    05 MEM-ID-COMPONENT-PTR POINTER
           OCCURS 1 TO 10 TIMES
           DEPENDING ON MEM-ID-COMPONENT-COUNT.
01 MEM-ID-COMPONENT.
    05 MEM-ID-COMP-TYPE PIC 9(4) BINARY.
    05 MEM-ID-COMP-NAME-STRING.
       10 MEM-ID-COMP-NAME-LEN PIC 9(4) BINARY.
       10 MEM-ID-COMP-NAME-GROUP.
          15 MEM-ID-COMP-NAME PIC X
                OCCURS 1 TO 10 TIMES
                DEPENDING ON MEM-ID-COMP-NAME-LEN.
01 MEMBER-NAME-STRING.
    05 MEMBER-NAME-LEN PIC 9(4) BINARY.
    05 MEMBER-NAME-GROUP.
       10 MEMBER-NAME PIC X
                      OCCURS 1 TO 10 TIMES
                      DEPENDING ON MEMBER-NAME-LEN.
GET-RAM-PARM3-MEM-ID.
     SET ADDRESS OF MEMBER-ID-SPEC TO RAM-PARM3
     SET ADDRESS OF MEM-ID-SPEC-COLL
                 TO MEM-ID-SPEC-COLL-PTR
     IF MEM-ID-COMPONENT-COUNT NOT = 1 THEN
        SET RAM-RC-MEM-ID-SPEC-BAD TO TRUE
     ELSE
        SET ADDRESS OF MEM-ID-COMPONENT
            TO MEM-ID-COMPONENT-PTR(1)
        IF MEM-ID-COMP-TYPE NOT = 0 THEN
           SET RAM-RC-MEM-ID-SPEC-BAD TO TRUE
        END-IF
     END-IF
     IF RAM-RC-OK THEN
        SET ADDRESS OF MEMBER-NAME-STRING
           TO ADDRESS OF MEM-ID-COMP-NAME-STRING
        IF TRACELVL >= TRACEBAS THEN
          MOVE SPACES TO LOG-TEXT
          STRING "Member = " DELIMITED BY SIZE
                 MEMBER-NAME-GROUP DELIMITED BY SIZE
                 INTO LOG-TEXT
          CALL LOGFUNC USING LOG-HOST, LOG-MODULE, LOG-TEXT
        END-IF
     END-IF.

ユーザー出口を COBOL で作成している場合、通常、メンバー名引数を取得するこのコードを変更する必要はありません。このコードはデータ構造を記述し、PL/I または HLASM に出口を再書き込みするユーザーのために提供されているものです。

最初のメンバー・レコードを取得するためのコード:

GET-1ST-MEM-REC.
     PERFORM GET-RAM-PARM2-RAM-ARGS
     PERFORM VAL-REPOS-VS-RAM-ARGS
     IF RAM-RC-OK THEN
        PERFORM GET-RAM-PARM3-MEM-ID
        PERFORM USER-GET-1ST-MEM-REC
     END-IF.

このコードは VAL-REPOS-VS-RAM-ARGS ルーチンを使用し、既にライブラリーが妥当性検査済みかどうかを判別します。妥当性検査済みであれば、再実行する必要はありません。その後、メンバー名を取得し、USER-GET-1ST-MEM-REC を呼び出します。ここで、ユーザー・ライブラリー・アクセス方式への呼び出しを挿入する必要があります。

メンバー・レコード結果は、以下のようなデータ域に戻されます。

01 REC-DATA-RETURN-AREA.
    05 REC-DATA-RETURN-ATTR1 PIC 9(4) BINARY VALUE 1.
    05 REC-DATA-RETURN-LEN1  PIC 9(4) BINARY VALUE 80.
    05 REC-DATA-RETURN-STR1  PIC X(80).
    05 REC-DATA-RETURN-END   PIC X(2)        VALUE X"FFFF".

メンバー・レコード・テキストが REC-DATA-RETURN-STR1 に置かれ、戻りコード 0 が返されます。

メンバーが空であれば、RAM-RC-EOF (180) 戻りコードが返されます。

注: 専有 INCLUDE ステートメントをメンバーに置く機能を提供する LMS をサポートしている場合は、その専有 INCLUDE を完全に展開する必要があります。

メンバー内の 2 番目以降のレコードを取得する場合、メンバー名パラメーターは出口に渡されません。