Navigation

    DDBB

    • Register
    • Login
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    新手入门之COBOL子程序

    PROGRAMMING LANGUAGES
    1
    1
    126
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      admin last edited by

      使用子程序把输入文件的6位日期转换成8位日期。

      编译和运行的JCL,JCL没经过测试。要是跑不通就留言。有人问就手写的

      //KOKHEL1 JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),                        
      //             NOTIFY=&SYSUID                                           
      //STEP010  EXEC PROC=IGYWCL                                             
      //COBOL.SYSIN DD DSN=KOK.COBOL.LIB(TESTSUB),DISP=SHR                     
      //LKED.SYSLMOD DD DSN=KOK.LOAD.LIB(TESTSUB),DISP=SHR 
        NAME TESTSUB(R)
      //STEP020  EXEC PROC=IGYWCL                                             
      //COBOL.SYSIN DD DSN=KOK.COBOL.LIB(TESTMAIN),DISP=SHR                     
      //LKED.SYSLMOD DD DSN=KOK.LOAD.LIB(TESTMAIN),DISP=SHR 
        INCLUDE SYSLMOD(TESTSUB)
         NAME TESTMAIN(R) 
      //TEST030  EXEC PGM=TESTMAIN                                 
      //STEPLIB  DD DSN=KOK.LOAD.LIB,DISP=SHR                
      //TESTFA  DD DSN=KOK.PS.TESTFA,DISP=SHR              
      //TESTFC  DD DSN=KOK.PS.TESTFC,DISP=SHR              
      //SYSPRINT DD SYSOUT=*                                       
      //CEEDUMP  DD SYSOUT=*                                       
      //SYSDUMP  DD SYSOUT=*                                       
      //    
      

      主程序:

      ****** ***************************** Top of Data ******************************
      000100 000100   PROCESS TEST,MAP                                               
      008900 008900******************************************************************
      009000 009000*  IDENTIFICATION DIVISION                                        
      009100 009100******************************************************************
      009101 009101 IDENTIFICATION                  DIVISION.                        
      009102 009102 PROGRAM-ID.                     TESTMAIN.                        
      009103 009103******************************************************************
      009104 009104*  ENVIRONMENT    DIVISION                                        
      009105 009105******************************************************************
      009106 009106 ENVIRONMENT                     DIVISION.                        
      009107 009107 CONFIGURATION                   SECTION.                         
      009108 009108 INPUT-OUTPUT                    SECTION.                         
      009109 009109 FILE-CONTROL.                                                    
      009110 009110     SELECT  FILEA  ASSIGN       TO TESTFA.                       
      009111 009111     SELECT  FILEC  ASSIGN       TO TESTFC.                       
      009112 009112******************************************************************
      009113 009113*  DATA           DIVISION                                        
      009114 009114******************************************************************
      009115 009115 DATA                            DIVISION.                        
      009116 009116 FILE                            SECTION.                         
      009117 009117 FD FILEA                                                         
      009118 009118     BLOCK   CONTAINS    0   RECORDS                              
      009119 009119     LABEL   RECORD      IS  STANDARD                             
      009120 009120     RECORDING MODE F.                                            
      009121 009121 01 FA-REC.                                                       
      009122 009122    05 FA-INFO.                                                   
      009123 009123       07 FA-NAME                PIC X(09).                       
      009124 009124       07 FILLER                 PIC X(01).                       
      009125 009125       07 FA-DATA                PIC 9(06).                       
      009126 009126       07 FILLER                 PIC X(24).                       
      009127 009127*                                                                 
      009128 009128 FD FILEC                                                         
      009129 009129     BLOCK   CONTAINS    0   RECORDS                              
      009130 009130     LABEL   RECORD      IS  STANDARD                             
      009131 009131     RECORDING MODE F.                                            
      009132 009132 01 FC-REC.                                                       
      009133 009133    05 FC-INFO.                                                   
      009140 009140       07 FC-NAME                PIC X(09).                       
      009150 009150       07 FILLER                 PIC X(01).                       
      009160 009160       07 FC-DATA                PIC 9(08).                       
      009161 009161       07 FILLER                 PIC X(24).                       
      009162 009162*                                                                 
      009163 009163******************************************************************
      009164 009164*  WORKING-STORAGE SECTION                                        
      009165 009165******************************************************************
      009166 009166 WORKING-STORAGE                 SECTION.                         
      009167 009167 01 WK-SWITCH                    PIC X(01).                       
      009168 009168    88 WK-SWH-ON                 VALUE '1'.                       
      009169 009169    88 WK-SWH-OFF                VALUE '0'.                       
      009170 009170 01 WK-COUNT.                                                     
      009171 009171    05 WK-CNT-RD                 PIC 9(03).                       
      009172 009172    05 WK-CNT-WT                 PIC 9(03).                       
      009177 009177 01 WK-DATA-IN.                                                   
      009178 009178    05  WK-YEAR-IN               PIC 9(02).                       
      009179 009179    05  WK-MOUTH-IN              PIC 9(02).                       
      009180 009180    05  WK-DAY-IN                PIC 9(02).                       
      009181 009181 01 WK-DATA-OUT.                                                  
      009182 009182    05  WK-YEAR-OUT              PIC 9(04).                       
      009183 009183    05  WK-MOUTH-OUT             PIC 9(02).                       
      009184 009184    05  WK-DAY-OUT               PIC 9(02).                       
      009185 009185******************************************************************
      009186 009186*  PROCEDURE      DIVISION                                        
      009187 009187******************************************************************
      009188 009188 PROCEDURE                       DIVISION.                        
      009191 009191 MAIN                            SECTION.                         
      009192 009192 MAIN-S.                                                          
      009193 009193     PERFORM  1000-INIT.                                          
      009194 009194     PERFORM  2000-MAIN.                                          
      009195 009195     PERFORM  3000-END.                                           
      009196 009196     STOP RUN.                                                    
      009197 009197 MAIN-E.                                                          
      009198 009198     EXIT.                                                        
      009199 009199******************************************************************
      009200 009200*  1000-INIT                                                      
      009201 009201******************************************************************
      009202 009202 1000-INIT                       SECTION.                         
      009203 009203 1000-INIT-S.                                                     
      009204 009204     INITIALIZE  WK-SWITCH , WK-COUNT , WK-DATA-IN , WK-DATA-OUT. 
      009205 009205     OPEN INPUT  FILEA.                                           
      009206 009206     OPEN OUTPUT FILEC.                                           
      009207 009207 1000-INIT-E.                                                     
      009208 009208     EXIT.                                                        
      009209 009209******************************************************************
      009210 009210*  2000-MAIN                                                      
      009211 009211******************************************************************
      009212 009212 2000-MAIN                       SECTION.                         
      009213 009213 2000-MAIN-S.                                                     
      009214 009214     ADD   +1                    TO WK-CNT-RD.                    
      009215 009215     READ FILEA                                                   
      009216 009216       AT END                                                     
      009217 009217         SET   WK-SWH-ON         TO TRUE                          
      009218 009218       NOT AT END                                                 
      009219 009219         MOVE  FA-NAME           TO FC-NAME                       
      009220 009220         MOVE  FA-DATA           TO WK-DATA-IN                    
      009221 009221         CALL  'TESTSUB'         USING WK-DATA-IN , WK-DATA-OUT   
      009222 009222         MOVE  WK-DATA-OUT       TO FC-DATA                       
      009223 009223         WRITE FC-REC                                             
      009224 009224         ADD   +1                TO WK-CNT-WT                     
      009225 009225     END-READ.                                                    
      009230 009230*                                                                 
      020700 020700     PERFORM  UNTIL WK-SWH-ON                                     
      020710 020710       ADD  +1                   TO WK-CNT-RD                     
      020800 020800       READ FILEA                                                 
      020900 020900         AT END                                                   
      020910 020910           SET   WK-SWH-ON       TO TRUE                          
      021000 021000         NOT AT END                                               
      021001 021001           MOVE  FA-NAME         TO FC-NAME                       
      021002 021002           MOVE  FA-DATA         TO WK-DATA-IN                    
      021003 021003           CALL  'TESTSUB'       USING WK-DATA-IN , WK-DATA-OUT   
      021004 021004           MOVE  WK-DATA-OUT     TO FC-DATA                       
      021020 021020           WRITE FC-REC                                           
      021030 021030           ADD   +1              TO WK-CNT-WT                     
      021100 021100       END-READ                                                   
      021200 021200     END-PERFORM.                                                 
      021300 021300 2000-MAIN-E.                                                     
      021400 021400     EXIT.                                                        
      023300 023300******************************************************************
      023400 023400* 3000-END                                                        
      023500 023500******************************************************************
      023600 023600 3000-END                        SECTION.                         
      023601 023601 3000-END-S.                                                      
      023603 023603     DISPLAY 'READ : ' , WK-CNT-RD.                               
      023605 023605     DISPLAY 'WRITE: ' , WK-CNT-WT.                               
      023607 023607     CLOSE FILEA , FILEC.                                         
      023609 023609 3000-END-E.                                                      
      023610 023610     EXIT.                                                        
      ****** **************************** Bottom of Data ****************************
      

      子程序

      ****** ***************************** Top of Data ******************************
      000001 000100   PROCESS TEST,MAP                                               
      000002 008900******************************************************************
      000003 009000*  IDENTIFICATION DIVISION                                        
      000004 009100******************************************************************
      000005 009101 IDENTIFICATION                  DIVISION.                        
      000006 009102 PROGRAM-ID.                     TESTSUB.                         
      000007 009103******************************************************************
      000008 009104*  ENVIRONMENT    DIVISION                                        
      000009 009105******************************************************************
      000010 009106 ENVIRONMENT                     DIVISION.                        
      000011 009107 CONFIGURATION                   SECTION.                         
      000012 009112******************************************************************
      000013 009113*  DATA           DIVISION                                        
      000014 009114******************************************************************
      000015 009115 DATA                            DIVISION.                        
      000016 009166 WORKING-STORAGE                 SECTION.                         
      000017 009181 01 WK-DATA-OUT.                                                  
      000018 009182    05  WK-YEAR-OUT.                                              
      000019 009183        07 WK-YEAR-OUT1          PIC 9(02).                       
      000020 009184        07 WK-YEAR-OUT2          PIC 9(02).                       
      000021 009185    05  WK-MOUTH-OUT             PIC 9(02).                       
      000022 009186    05  WK-DAY-OUT               PIC 9(02).                       
      000023 009187******************************************************************
      000024 009188*  LINKAGE SECTION                                                
      000025 009189******************************************************************
      000026 009190 LINKAGE                         SECTION.                         
      000027 009191 01 LK-DATA-IN.                                                   
      000028 009192    05  LK-YEAR-IN               PIC 9(02).                       
      000029 009193    05  LK-MOUTH-IN              PIC 9(02).                       
      000030 009194    05  LK-DAY-IN                PIC 9(02).                       
      000031 009195 01 LK-DATA-OUT.                                                  
      000032 009196    05  LK-YEAR-OUT              PIC 9(04).                       
      000033 009197    05  LK-MOUTH-OUT             PIC 9(02).                       
      000034 009198    05  LK-DAY-OUT               PIC 9(02).                       
      000035 009199******************************************************************
      000036 009200*  PROCEDURE      DIVISION                                        
      000037 009201******************************************************************
      000038 009202 PROCEDURE                       DIVISION USING LK-DATA-IN ,      
      000039                                                       LK-DATA-OUT.      
      000040 009203*                                                                 
      000041 009204     PERFORM  1000-INIT.                                          
      000042 009205     PERFORM  2000-MAIN.                                          
      000043 009206     PERFORM  3000-END.                                           
      000044 009207******************************************************************
      000045 009208*  1000-INIT                                                      
      000046 009209******************************************************************
      000047 009210 1000-INIT                       SECTION.                         
      000048 009211 1000-INIT-S.                                                     
      000049 009212     INITIALIZE  WK-DATA-OUT.                                     
      000050 009213 1000-INIT-E.                                                     
      000051 009214     EXIT.                                                        
      000052 009215******************************************************************
      000053 009216*  2000-MAIN                                                      
      000054 009217******************************************************************
      000055 009218 2000-MAIN                       SECTION.                         
      000056 009219 2000-MAIN-S.                                                     
      000057 009220     IF  LK-YEAR-IN > 50                                          
      000058 009230         MOVE  19                TO WK-YEAR-OUT1                  
      000059 009240         MOVE  LK-YEAR-IN        TO WK-YEAR-OUT2                  
      000060 009250     ELSE                                                         
      000061 009260         MOVE  20                TO WK-YEAR-OUT1                  
      000062 009270         MOVE  LK-YEAR-IN        TO WK-YEAR-OUT2                  
      000063 009280     END-IF.                                                      
      000064 009290     MOVE  LK-MOUTH-IN           TO WK-MOUTH-OUT.                 
      000065 009300     MOVE  LK-DAY-IN             TO WK-DAY-OUT.                   
      000066 009400     MOVE  WK-DATA-OUT           TO LK-DATA-OUT.                  
      000067 021300 2000-MAIN-E.                                                     
      000068 021400     EXIT.                                                        
      000069 023300******************************************************************
      000070 023400* 3000-END                                                        
      000071 023500******************************************************************
      000072 023600 3000-END                        SECTION.                         
      000073 023601 3000-END-S.                                                      
      000074 023608     GOBACK.                                                      
      000075 023609 3000-END-E.                                                      
      000076 023610     EXIT.                                                        
      ****** **************************** Bottom of Data ****************************
      

      input data set:

      ****** ***************************** Top of Data ******************************
      000001 AAAAAAAAA 981110                                                        
      000002 BBBBBBBBB 961110                                                        
      000003 CCCCCCCCC 081010                                                        
      000004 DDDDDDDDD 020202                                                        
      000005 EEEEEEEEE 860520                                                        
      000006 FFFFDDDDD 001111                                                        
      ****** **************************** Bottom of Data ****************************
      

      output data set:

      ****** ***************************** Top of Data ******************************
      000001 AAAAAAAAA 19981110                                                      
      000002 BBBBBBBBB 19961110                                                      
      000003 CCCCCCCCC 20081010                                                      
      000004 DDDDDDDDD 20020202                                                      
      000005 EEEEEEEEE 19860520                                                      
      000006 FFFFDDDDD 20001111                                                      
      ****** **************************** Bottom of Data ****************************
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post