バージョン 4.2.5
 —  ステートメント  —

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 以外のプログラムを呼び出すために使用します。

Top of page

制限事項

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

Top of page

構文説明

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

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
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 END-FILE ステートメントを使用して、処理ループを閉じる必要があります。

Top of page

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

** 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.

Top of page