1

次のプログラムでは、インデックス付きファイルを使用して基本的な操作を実行します。実行すると、レコードを追加しようとしたときにすべてが期待どおりに機能し、成功メッセージも表示されます。ただし、それを読み取るコードlees---が対応するIDを見つけようとすると、それを見つけることができません。ディスク上のインデックスファイルのサイズを見ると、サイズが0kbであることがわかります。私は何を見落としていますか?

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. oef16_indexedfiles.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT indexfile ASSIGN TO "C:\Test\indexedfile.dat"
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
RECORD KEY IS id-number
ALTERNATE KEY IS fname WITH DUPLICATES
ALTERNATE KEY IS lname WITH DUPLICATES
ALTERNATE KEY IS city WITH DUPLICATES
ALTERNATE KEY IS hobby WITH DUPLICATES.

DATA DIVISION.
FILE SECTION.
FD indexfile.
01 persoon.
 02 id-number    PIC 9.
 02 name.
        03 fname        PIC A(25).
        03 lname        PIC A(30).
 02 city         PIC A(30).
 02 hobby        PIC X(40).

WORKING-STORAGE SECTION.
01 einde        PIC X.
01 msg          PIC X(50).
01 countno      PIC 9 VALUE 1.

PROCEDURE DIVISION.
PGM.
 PERFORM schrijf
 PERFORM lees
 STOP RUN.

   check.
    DISPLAY msg
    ACCEPT einde

   schrijf.
   MOVE "1 = stoppen, 0 = doorgaan" TO msg       
   PERFORM check
   OPEN I-O indexfile

   PERFORM UNTIL einde = 1
    MOVE countno TO id-number

    DISPLAY "Enter your first name:"
    ACCEPT fname

    DISPLAY "Enter your last name:"
    ACCEPT lname

    DISPLAY "Enter your city:"
    ACCEPT city

    DISPLAY "Enter your hobby:"
    ACCEPT hobby

    WRITE persoon
            INVALID KEY
                    DISPLAY "ERROR WRITING: " id-number
            NOT INVALID KEY
                    DISPLAY "ID " id-number " by " fname " is added"
    END-WRITE
    ADD 1 TO countno

    PERFORM check
   END-PERFORM
   CLOSE indexfile
   MOVE 0 TO einde

   lees.
    OPEN INPUT indexfile
    MOVE 1 TO id-number
    READ indexfile 
            INVALID KEY
                    DISPLAY "Invalid key: " id-number
            NOT INVALID KEY
                    DISPLAY id-number SPACE fname SPACE lname SPACE
                            city SPACE hobby
    END-READ

    CLOSE indexfile
    MOVE 0 TO einde
    ACCEPT einde
4

2 に答える 2

3

OPTIONAL を SELECT 句に追加してみてください。OPEN IO を保持します。

オプションのindexfile ASSIGN TO "indexedfile.dat" を選択します。

OPTIONAL は、最初の書き込みの準備として、存在しないファイルを開くことを許可します。

さらに、ビルのアドバイスに従ってください。OPEN(またはそのためのアクセス)の後にFILE-STATUSをチェックすることに慣れてください。

段落をピリオドで終了し、FIXED 形式 (表示行数が 72 列を超える) に再フォーマットした後、OPTIONAL が追加されると、このコードは OpenCOBOL で正常に機能しました。その前に失敗します

libcob: ファイルが存在しません (ステータス = 35) ファイル: 'indexedfile.dat'

于 2013-01-17T16:17:34.243 に答える
0

私は他の人から答えを指摘されました。write メソッド ( ) では、ファイルを開くときの代わりにメソッドschrijfを使用する必要があります。OUTPUTI-O

詳細な説明については、以下のコメントをご覧ください。

于 2013-01-17T13:58:26.333 に答える