0

我的任务是从第一个文件中读取一条记录,并从第二个文件中检查相应的记录并显示它。这是我的代码:

PERFORM READ-PARA1 THRU END-PARA UNTIL WS-END-OF-FILE.   
    PERFORM READ-PARA2 THRU END-PARA UNTIL WS-END-OF-FILE.   
    CLOSE FILEX.                                             
    CLOSE FILEY.                                             
    STOP RUN.                                                
READ-PARA1.                                                  
    READ FILEX                                               
      AT END                                                 
         MOVE 'Y' TO WS-EOF-IND.                             
      DISPLAY SPACE                                          
      DISPLAY OCODE1,'    'ACODE1,'    'POLNO1,' 'EDATE1,    
              ' 'PHOLD1,' 'LOCATION1,' '.                    
READ-PARA2.                                                  
    READ FILEY                                               
     READ FILEY                                                   
       AT END                                                     
          PERFORM READ-PARA3 UNTIL R1 = 4.                        
   IF POLNO1 = POLNO2                                             
      DISPLAY '                                                ', 
              LICNO1,' 'VMAKE1,' 'VMODEL,' 'YEAR,' 'PREM          
   ELSE                                                           
      READ FILEY NEXT RECORD                                      
      GO TO READ-PARA2.                                           
 END-PARA.                                                        
       EXIT.                                                      
 READ-PARA3.                                                      
      CLOSE FILEY.                                                
      OPEN INPUT FILEY.                                           
      READ FILEY                                                  
        AT END                                                    
           MOVE 'Y' TO WS-EOF-IND.                                
   ADD 1 TO R1.                                                   
   IF POLNO1 = POLNO2                                             
      DISPLAY '                                                ', 
   DISPLAY '                                                ', 
           LICNO1,' 'VMAKE1,' 'VMODEL,' 'YEAR,' 'PREM          
ELSE                                                           
   READ FILEY NEXT RECORD                                      
   GO TO READ-PARA3.

此代码仅用于查找文件 1 的第一条记录的相应记录,但其余所有显示为空白,并且都是顺序文件。

4

1 回答 1

4

我真的不知道该说什么,除非尝试使用最新的编码实践重新编写程序 - 您当前的代码是 COBOL-85 前后编码风格的混合,因此很难遵循。尝试根据以下目标重写。

  1. 不要使用PERFORM THRU. PERFORM很好,该THRU位是 COBOL-85 之前的回归,不应再使用。如果您需要在循环中执行多个段落/部分,请尝试以下操作:
          执行直到某些条件
              执行 A 段
              PEROFMR PARA-B
          最终执行
    
  2. END-IF使用显式范围终止符,例如END-PERFORM等。
  3. 切勿使用句点 (.) 作为条件语句终止符。句号应该(必须)出现的唯一位置是分隔段落/部分的结尾。
  4. 不要使用GO TO. 很少有地方需要使用GO TO。在这种规模/复杂性的程序中,永远不应该使用它。
  5. 摆脱仅包含EXIT. 正确使用作用域终止符时(参见第 1 点和第 2 点)。EXIT不再需要。
  6. 您还没有使用它,但以防万一,请不要使用NEXT SENTENCE. 这也是 COBOL-85 之前的回归,在技术上已经过时。

如果您设法按照上述指南重新编写,您可能会发现您的问题更容易发现和修复。再试一次。我认为第二次尝试可能会更好。

于 2012-07-30T13:36:55.297 回答