2017-03-29 4 views
0

こんにちは私はtutorialpointsからcobolを学習しています。私はOpenCobolIDEでそれらをテストしました。それから、私はファイル処理の章を見つけました。そこでは、プログラムに多くのエラーがありました。私は何もエラーを表示しないが、何もしないまで、プログラムを書き直すことができた。Cobol:テキストファイルのエントリポイントを見つけることができません

ここに私のコードです:

IDENTIFICATION DIVISION. 
     PROGRAM-ID. HELLO. 

     ENVIRONMENT DIVISION. 
      INPUT-OUTPUT SECTION. 
      FILE-CONTROL. 
       SELECT STUDENT ASSIGN TO 
       'C:\Cobol\FIle Handling\input.txt' 
       ORGANIZATION IS INDEXED 
       ACCESS IS RANDOM 
       RECORD KEY IS STUDENT-ID 
       FILE STATUS IS FS. 

     DATA DIVISION. 
      FILE SECTION. 
      FD STUDENT. 
       01 STUDENT-FILE. 
       05 STUDENT-ID PIC 9(5). 
       05 NAME PIC A(25). 

      WORKING-STORAGE SECTION. 
       01 WS-STUDENT-FILE. 
       05 WS-STUDENT-ID PIC 9(5). 
       05 WS-NAME PIC A(25). 
       01 FS PIC 9(02). 

     PROCEDURE DIVISION. 
      OPEN I-O STUDENT. 
       MOVE 20005 TO STUDENT-ID. 
      READ STUDENT RECORD INTO WS-STUDENT-FILE 
        KEY IS STUDENT-ID 
        INVALID KEY DISPLAY 'Invalid Key' 
        NOT INVALID KEY DISPLAY WS-STUDENT-FILE 
      END-READ. 

      CLOSE STUDENT. 
     STOP RUN. 

これはテキストファイルです:

20003 Mohtashim M. 
20004 Nishant Malik 
20005 Amitabh Bachhan 

結果はテキストのようになります。

20005 Amitabh Bachhan 
+0

JCLは正しく設定されていますか?私の推測では、ファイルを開くときにエラーが発生しているということです。どちらか(プログラムによる)存在しないか、または空です。このプログラムはステータスコードをチェックしていないので、それを伝えることは不可能です。いくつかのチェックを追加して、ファイルが開いているかどうかを確認します。 – SaggingRufus

+0

@SaggingRufus OpenCOBOLです(年前はGnuCOBOLに改名されました)。 JCLは関係ありません:-) –

+4

テキストファイルを作成し、それをインデックスファイルとして使用することはできません。インデックス付きファイルを作成するために別の小さなCOBOLプログラムを作成する場合(既存のファイルを入力し、各レコードをインデックスファイルに書き込む)、「インデックス付きファイルサポート」がインストールされていると仮定すると、上のプログラムを変更して、ファイルを作成し、次に動作する必要があります。 @SaggingRufusがすでに示唆しているように、あなたはほぼ確実にOPEN上で非ゼロのFILE STATUSとREADを得ています。読んでキー入力をしていることを示すのは良いことです。 –

答えて

2

それが何かをやっている:これは、ファイルを読んでいます。しかし、それだけです。あなたはそれを表示したり、レコードをメモリに読み込むこと以外に何かをするよう要求しませんでした。 DISPLAYステートメントを使用するか、別のファイルを作成して出力を書き込むことができます。

私はいくつかの提案をしますか?

現代のCOBOLでは、手続き的にはすべての後にピリオドを入れません。必要な場所に置くだけです。たとえば、次の

コンパイラは私があなただったら、私は(私は上記の:-)をインデントする方法好き)私のコードビットより良いインデントしようと思い、スペースとリターンを気にしませんが
PROCEDURE DIVISION. 
     OPEN I-O STUDENT 
     MOVE 20005 TO STUDENT-ID 
     READ STUDENT RECORD INTO WS-STUDENT-FILE 
      KEY IS STUDENT-ID 
      INVALID KEY DISPLAY 'Invalid Key' 
      NOT INVALID KEY DISPLAY WS-STUDENT-FILE 
     END-READ 

     CLOSE STUDENT 
     STOP RUN 
     . 

。それはあなた次第であり、多くの人が違うやり方をするのが好きですが、一貫性があるならば、あなたのコードを突き抜けてしまう可能性のある問題を発見することができます。

編集:テキストファイルからキーを読み取っていることに気付かなかった。だから、あなたがする必要があり、次のいずれか事前に構築されたインデックス付きファイル、または

  • から読み取る

    1. は、ファイルを順番に読んで、あなたが望んでいた学生証のために読んで何と比較することによって、あなたが欲しいものを検索します。
  • +1

    ファイルを正しく読み込むにはどうすればいいですか?テキストファイルなので索引付けされません。 OPは索引付き検索を実行しています。 – SaggingRufus

    +0

    @SaggingRufusあなたが正しいです。私は物事をあまりにも速く読んで、それがテキストファイルであることに気付かなかった。 –

    関連する問題