2016-04-24 231 views
-1

遇到程序問題。我已經發現如何通過VSAM KSDS文件讀取,但我需要匹配並與正常的順序文件合併。誰能幫忙?Cobol Vsam KSDS匹配併合

的規格是:

  • 在源庫
  • 對於VSAM文件創建一個COBOL基本程序使用下面的副本 - VSAMFD,VSAMRC,VSAMSEL在COBOL程序的適當地方。
  • 定義輸入(SELECT,FD,OPEN,READ,CLOSE)
  • 定義輸出(SELECT,FD,OPEN,寫,關閉)
  • 寫了必要的程序分流語句讀通所有輸入文件。對於每個記錄填充輸出記錄並將記錄寫入輸出打印文件。
  • 使用VSAM文件的密鑰讀取以獲得畢業年份的記錄。從VSAM文件輸入填充畢業年份。
  • 如果未找到VSAM記錄(VSAMRC不是'00'-移動'????'爲畢業年份爲O/P記錄。
  • 找到後,填寫輸出記錄並寫入適當的O/P記錄

COBOL程序:

IDENTIFICATION DIVISION. 
    PROGRAM-ID. SU43PGM5. 
    ENVIRONMENT DIVISION. 
    CONFIGURATION SECTION. 
    INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 
     SELECT VSAM-KSDS-FILE ASSIGN IFILE2 
      ORGANIZATION IS INDEXED 
      ACCESS MODE IS SEQUENTIAL 
      RECORD KEY IS VSAM-KSDS-RECORD-KEY 
      FILE STATUS IS VSAM-STATUS-CODE 
          VSAM-EXTENDED-STATUS-CODE. 
     SELECT IN-FILE ASSIGN TO IFILE. 
     SELECT IN-FILE-2 ASSIGN TO IFILE2. 
     SELECT OUT-FILE ASSIGN TO OFILE. 

***** NEED TO HAVE SELECTS FOR REGULAR FILES AS WELL 
***** PURPOSE OF THIS PROGRAM - COMBINE THE REGULAR FILES WITH VSAM 

    DATA DIVISION. 
    FILE SECTION. 
    FD IN-FILE 
     RECORDING MODE IS F 
     RECORD CONTAINS 500 CHARACTERS 

    01 IN-REC. 
     05 IN-NAME  PIC X(20). 
     05 IN-ADDRESS  PIC X(20). 
     05 IN-SSN   PIC 9(9). 
     05 IN-YR-GRAD  PIC X(2). 
     05 FILLER   PIC X(25). 

    FD IN-FILE-2. 
    01 IN-REC-2. 
     05 IN-SSN-2  PIC 9(9). 
     05 IN-CREDITS-2 PIC XX. 

    FD OUT-FILE. 
    01 OUT-REC. 
     05 OUT-NAME  PIC X(20). 
     05 OUT-ADDRESS  PIC X(20). 
     05 OUT-SSN   PIC 9(9). 
     05 OUT-YR-GRAD  PIC X(2). 
     05 FILLER   PIC X(25). 

    FD VSAM-KSDS-FILE. 
    01 VSAM-KSDS-RECORD. 
     05 VSAM-KSDS-RECORD-KEY PIC X(20). 
     05 VSAM-KSDS-EMP-INFO  PIC X(60). 
    WORKING-STORAGE SECTION. 

    01 WS-WORK-AREA. 
     05 IN-CTR   PIC 9(5) COMP-3 VALUE 0. 
     05 OUT-CTR  PIC 9(5) COMP-3 VALUE 0. 
     05 EOF-SW   PIC X    VALUE SPACES. 
     05 EOF-SW-2  PIC X    VALUE SPACES. 
     05 MATCH-SWITCH PIC X    VALUE SPACES. 

    01 VSAM-STATUS-CODE. 
     05 VSAM-STATUS-CODE-BYTE1 PIC X. 
     05 VSAM-STATUS-CODE-BYTE2 PIC X. 

    01 VSAM-EXTENDED-STATUS-CODE. 
     05 VSAM-EXTENDED-RETURN-CODE PIC S9(4) COMP. 
     05 VSAM-EXTENDED-FUNCTION-CODE PIC S9(4) COMP. 
     05 VSAM-EXTENDED-FEEDBACK-CODE PIC S9(4) COMP. 

    01 SWITCHES. 
     05 FILE-AT-END  PIC X VALUE 'N'. 

    PROCEDURE DIVISION. 
     PERFORM INITIALIZATION 
     PERFORM PROCESS-ALL 
      UNTIL FILE-AT-END = 'Y' 
     PERFORM TERMINATION 
     GOBACK. 

    OPEN-FILES-RTN. 
     OPEN INPUT IN-FILE. 

     OPEN OUTPUT OUT-FILE. 

     READ IN-FILE 
     AT END MOVE 'F' TO EOF-SW. 
    OPEN-FILES-RTN-EXIT. EXIT. 

    INITIALIZATION. 
     OPEN INPUT VSAM-KSDS-FILE 
     IF VSAM-STATUS-CODE IS NOT EQUAL TO '00' 
     THEN GO TO ERROR-EXIT 
     END-IF 
     PERFORM READ-PAR. 

    PROCESS-ALL. 
    * THIS PROGRAM IS SIMPLE. 
    * IT JUST DISPLAYS THE RECORDS OF THE VSAM FILE 
    * OTHER PROGRAMS WOULD DO MORE INVOLVED PROCESSING 
     DISPLAY VSAM-KSDS-RECORD 
     PERFORM READ-PAR. 

    TERMINATION. 
     CLOSE VSAM-KSDS-FILE. 
    READ-PAR. 
     READ VSAM-KSDS-FILE 
     AT END MOVE 'Y' TO FILE-AT-END 
     NOT AT END 
     IF VSAM-STATUS-CODE IS NOT EQUAL TO '00' 
     THEN GO TO ERROR-EXIT 
     END-IF 
     END-READ. 


    ERROR-EXIT. 
+0

你可能已經有一個程序,它從文件中讀取所有記錄並寫入輸出文件。根據你的程序。添加代碼以對VSAM文件執行鍵控讀取,並在第二個輸出文件上創建記錄。看看這裏的例子問題。如果之後遇到問題,請更新此問題或寫出新問題。目前,您的程序與您所展示的規格沒有什麼關係。 –

回答

0

爲什麼它必須是一個COBOL程序

你也許可以用DFSORT(或Syncsort公司實現這一切,如果那是什麼?你的網站有)。我認爲JOINKEYS會進行匹配。

如果這是一個班級任務(並且沒有任何不尊重任何一方),如果您同時提供COBOL和DFSORT/Syncsort解決方案,您可能會獲得額外功勞。

這不是那麼我建議的方法可能會超越並且更易於維護。

只是一個想法。