CALL FILE

ストラクチャードモード構文

CALL FILE 'program-name' operand1 operand2
statement ../graphics/dot3.gif
END-FILE

レポーティングモード構文

CALL FILE 'program-name' operand1 operand2
statement ../graphics/dot3.gif
LOOP

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:CALL | CALL LOOP | CALLNAT | DEFINE SUBROUTINE | ESCAPE | FETCH | PERFORM

関連機能グループ:プログラムおよびルーチンの呼び出し


関数

CALL FILE ステートメントは、Adabas 以外のファイルからレコードを読み取って Natural プログラムに返す、Natural 以外のプログラムを呼び出すために使用します。

制限事項

ステートメント AT BREAKAT START OF DATA および AT END OF DATA は、CALL FILE 処理ループ内では使用できません。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S A     A U N P I F B D T L C    
operand2   S A G   A U N P I F B D T L C    

構文要素の説明:

構文要素 説明
'program-name'
呼び出すプログラム:
呼び出される Natural 以外のプログラムの名前。
operand1
コントロールフィールド:
operand1 は制御情報の提供に使用されます。
operand2
レコードエリア:
operand2 では、レコードエリアを定義します。

読み取るレコードのフォーマットは、レコード内の最初のフィールド名に続けてフィールド定義(または FILLER nX)エントリを使用して定義します。レコードフォーマットを定義するために使用されるフィールドは、Natural プログラム内で事前に定義しないでください。これは Natural がフィールドを連続ストレージに割り付けることを保証するためです。

statement ...
処理ループ:
CALL FILE ステートメントは、処理ループを開始します。この処理ループは、ESCAPE または STOP ステートメントで終了する必要があります。さまざまな条件に対応して CALL FILE ループから抜け出せるように、複数の ESCAPE ステートメントを指定することも可能です。
END-FILE
CALL FILE ステートメントの終了:

ストラクチャードモードの場合、Natural の予約キーワード END-FILE を使用して CALL FILE ステートメントを終了させる必要があります。

レポーティングモードでは、Natural のステートメント LOOP を使用して CALL FILE ステートメントを終了します。

LOOP

呼び出す側のプログラム:

** Example 'CFIEX1': CALL FILE                                          
************************************************************************
DEFINE DATA LOCAL                                                       
1 #CONTROL (A3)                                                         
1 #RECORD                                                               
  2 #A     (A10)                                                        
  2 #B     (N3.2)                                                       
  2 #FILL1 (A3)                                                         
  2 #C     (P3.1)                                                       
END-DEFINE                                                              
*                                                                       
CALL FILE 'USER1' #CONTROL #RECORD                                      
  IF #CONTROL = 'END'                                                   
    ESCAPE BOTTOM                                                       
  END-IF                                                                
END-FILE                                                                
/*****************************                                          
/* ... PROCESS RECORD ...                                               
/*****************************                                          
END

上記の例で呼び出されたプログラムが、Natural プログラムに渡すレコードのバイトレイアウトは、次のとおりです。

CONTROL #A       #B   FILLER  #C
(A3)   (A10)   (N3.2)  3X   (P3.1)
  
xxx xxxxxxxxxx xxxxx   xxx   xxx

呼び出される側の COBOL プログラム:

ID DIVISION.
PROGRAM-ID. USER1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
     SELECT USRFILE ASSIGN UT-S-FILEUSR.
DATA DIVISION.
FILE SECTION.
FD   USRFILE RECORDING F LABEL RECORD OMITTED
     DATA RECORD DATA-IN.
01   DATA-IN         PIC X(80).
LINKAGE SECTION.
01   CONTROL-FIELD   PIC XXX.
01   RECORD-IN       PIC X(21).
PROCEDURE DIVISION USING CONTROL-FIELD RECORD-IN.
BEGIN.
     GO TO FILE-OPEN.
FILE-OPEN.
     OPEN INPUT USRFILE
     MOVE SPACES TO CONTROL-FIELD.
     ALTER BEGIN TO PROCEED TO FILE-READ.
FILE-READ.
     READ USRFILE INTO RECORD-IN
          AT END
          MOVE 'END' TO CONTROL-FIELD
          CLOSE USRFILE
          ALTER BEGIN TO PROCEED TO FILE-OPEN.
     GOBACK.