Cobol 无法获取所需的输出

Cobol 无法获取所需的输出,cobol,Cobol,正如比尔所说,使用一个执行循环 为方便您,您的程序如下: FILE-CONTROL. SELECT FILE1 ASSIGN TO IN1. SELECT FILE2 ASSIGN TO IN2. SELECT FILE3 ASSIGN TO OUT1. SELECT FILE4 ASSIGN TO OUT2. DATA DIVISION.

正如比尔所说,使用一个执行循环

为方便您,您的程序如下:

FILE-CONTROL.                         
     SELECT FILE1 ASSIGN TO IN1.      
     SELECT FILE2 ASSIGN TO IN2.      
     SELECT FILE3 ASSIGN TO OUT1.     
     SELECT FILE4 ASSIGN TO OUT2.     
 DATA DIVISION.                                             
 FILE SECTION.                                              
  FD FILE1                                                  
     BLOCK CONTAINS 0 RECORDS                               
     RECORDING MODE IS F.                                   
  01 IN-FILE1-REC.                                          
     05 WS-NUM1                 PIC X(02) VALUE ZERO.       
     05 FILLER                   PIC X(78) VALUE SPACES.    
  FD FILE2                                                  
     BLOCK CONTAINS 0 RECORDS                               
     RECORDING MODE IS F.                                   
01 IN-FILE2-REC.                                         
   05 WS-NUM2                 PIC X(02) VALUE ZERO.      
   05 FILLER                   PIC X(78) VALUE SPACES.   
 FD FILE3                                                
    BLOCK CONTAINS 0 RECORDS                             
    RECORDING MODE IS F.                                 
 01 OUT-FILE3-REC                 PIC X(80).             
 FD FILE4                                                
    BLOCK CONTAINS 0 RECORDS                             
    RECORDING MODE IS F.                                 
 01 OUT-FILE4-REC                 PIC X(80).             
  WORKING-STORAGE SECTION.                                        
  01 WS-EOF-SW                    PIC X.                          
        88 EOF1                             VALUE 'Y'.            
  01 WS-EOF2-SW                   PIC X.                          
         88 EOF2                             VALUE 'Y'.           
 /                                                                
  PROCEDURE DIVISION.                                             
  0000-MAINLINE.                                                  
       DISPLAY '0000-MAINLINE'.                                   
       PERFORM 0001-OPENING.                                      
       PERFORM 0002-READF1                                        
       PERFORM 0006-CLOSING.                                      
  0001-OPENING.                                                   
      DISPLAY '0001-OPENING'.                                     
      OPEN INPUT FILE1                                            
                 FILE2                                            
          OUTPUT FILE3     
                 FILE4.    
   0002-READF1.                             
     DISPLAY '0002-READF1'.               
      READ FILE1                           
      AT END                              
      SET EOF1 TO TRUE                    
      NOT AT END                          
         DISPLAY 'WS-NUM1' WS-NUM1.       
      PERFORM 0003-COMPARE   
   0003-COMPARE.                  
    DISPLAY '0003-COMPARE'.    
    READ FILE2                           
    AT END                          
    SET EOF2 TO TRUE                
    PERFORM 0005-WRITEF4            
    NOT AT END                      
     DISPLAY 'WS-NUM1'  WS-NUM1      
     DISPLAY  'WS-NUM2' WS-NUM2      
     IF WS-NUM1 = WS-NUM2             
     PERFORM 0004-WRITEF3             
     DISPLAY 'WS-NUM2' WS-NUM2    
  END-IF.                          
 0004-WRITEF3.                            
      DISPLAY '0004-WRITEF3'.              
       MOVE WS-NUM1 TO OUT-FILE3-REC        
         DISPLAY 'FILE3' OUT-FILE3-REC    

    WRITE OUT-FILE3-REC   
    IF NOT EOF1           
    PERFORM 0002-READF1   
              ELSE                                            
          PERFORM 0006-CLOSING                            
          GOBACK.                                         
      0005-WRITEF4.                                       
          DISPLAY '0005-WRITEF4'.                         
          MOVE WS-NUM1 TO OUT-FILE4-REC.                  
              DISPLAY 'FILE4' OUT-FILE4-REC               
          WRITE OUT-FILE4-REC                             
          IF NOT EOF1                                     
          PERFORM 0002-READF1                             
          ELSE                                            
          PERFORM 0006-CLOSING                            
          GOBACK.                                         
      0006-CLOSING.                   
     DISPLAY '0006-CLOSING'.     
     CLOSE  FILE1                
            FILE2                
            FILE3                
            FILE4.               
           DISPLAY 'CLOSE'    
      GOBACK.                 
我建议你用谷歌搜索一下


是我在快速搜索中找到的最好的示例。

您没有迭代构造。相反,您使用递归执行,这是非常糟糕的。找到一个读取单个文件的程序(这里有一些示例)。让它为你工作,然后扩展它。
 perform read-input-file
 perform until eof
     ...
     perform read-input-file
 end-perform.