0

私の仕事は、最初のファイルからレコードを読み取り、2 番目のファイルから対応するレコードをチェックして表示することでした。これは私のコードです:

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 THRUPERFORMこのTHRUビットは COBOL-85 より前のスローバックであり、今後は使用しないでください。ループ内で複数の段落/セクションを実行する必要がある場合は、次のようにしてみてください。
          ある条件まで実行する
              パラAを実行する
              PEROFMR PARA-B
          エンドパフォーム
    
  2. などEND-IFの明示的なスコープ ターミネータを使用します。END-PERFORM
  3. ピリオド (.) を条件文の終了記号として使用しないでください。ピリオドが表示されるべき (必須) の唯一の場所は、段落/セクションの終わりを区切ることです。
  4. 使用しないでくださいGO TOGO TOの使用が保証される場所はほとんどありません。このサイズ/複雑さのプログラムでは、決して使用しないでください。
  5. のみを含む段落を削除しEXITます。スコープ ターミネータを適切に使用する場合 (ポイント 1 と 2 を参照)。EXITは不要になりました。
  6. 使用していませんが、念のため使用しないでくださいNEXT SENTENCE。これも COBOL-85 より前のスローバックであり、技術的には廃止されています。

上記のガイドラインに従って書き直すことができれば、問題を見つけて修正するのがはるかに簡単になることに気付くかもしれません。別のショットを与えます。2度目の挑戦でうまくいく可能性もあると思います。

于 2012-07-30T13:36:55.297 に答える