我正在尝试按索引打开文件,但不断收到以下错误。从我能找到的所有 COBOL 代码示例中,我看不到我的错误在哪里。
我能够按顺序打开文件就好了。这似乎是试图以索引方式打开它。
错误:
project2.cbl:119: libcob: Permanent file error (STATUS = 30) File : 'customers.dat'
系统:
OS X
GnuCOBOL
OpenCobolIDE
Version: 4.7.3
代码:
IDENTIFICATION DIVISION.
PROGRAM-ID. PROJECT-2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUST-FILE ASSIGN TO "customers.dat"
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS CUST-ID.
SELECT INV-FILE ASSIGN TO "inventory.dat"
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS ITEM-ID.
SELECT TRANS-FILE ASSIGN TO "transactions.dat"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SORTED-TRANS-FILE ASSIGN TO "sorted-transactions.dat"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT WORK-TRANS-FILE ASSIGN TO "work-transaction.dat".
DATA DIVISION.
FILE SECTION.
FD CUST-FILE.
01 CUST-RECORD.
05 CUST-ID PIC 9(10).
05 NAME PIC A(23).
05 STREET PIC X(23).
05 CITY PIC A(13).
05 STATE PIC A(12).
05 AMT-DUE PIC 9(3).99.
FD INV-FILE.
01 INV-RECORD.
05 ITEM-ID PIC 9(11).
05 DESC PIC A(24).
05 OH PIC 9(7).
05 MIN-STK PIC 9(7).
05 PRICE PIC 9(2).99.
FD TRANS-FILE.
01 TRANS-RECORD.
05 CUST PIC 9(10).
05 ITEM PIC 9(12).
05 QTY PIC 9(6).
05 SALE-CD PIC X(1).
88 10-OFF VALUE "A".
88 20-OFF VALUE "B".
88 25-OFF VALUE "C".
88 3-GET-1 VALUE "D".
88 1-GET-1 VALUE "E".
88 NO-DISC VALUE "Z".
FD SORTED-TRANS-FILE.
01 SORTED-TRANS-RECORD.
05 S-CUST PIC 9(10).
05 S-ITEM PIC 9(12).
05 S-QTY PIC 9(6).
05 S-SALE-CD PIC X(1).
88 10-OFF VALUE "A".
88 20-OFF VALUE "B".
88 25-OFF VALUE "C".
88 3-GET-1 VALUE "D".
88 1-GET-1 VALUE "E".
88 NO-DISC VALUE "Z".
SD WORK-TRANS-FILE.
01 WORK-TRANS-RECORD.
05 W-CUST PIC 9(10).
05 W-ITEM PIC 9(12).
05 W-QTY PIC 9(6).
05 W-SALE-CD PIC X(1).
88 10-OFF VALUE "A".
88 20-OFF VALUE "B".
88 25-OFF VALUE "C".
88 3-GET-1 VALUE "D".
88 1-GET-1 VALUE "E".
88 NO-DISC VALUE "Z".
WORKING-STORAGE SECTION.
01 SWITCHES.
05 C-EOF-SWITCH PIC X VALUE "N".
05 I-EOF-SWITCH PIC X VALUE "N".
05 T-EOF-SWITCH PIC X VALUE "N".
05 S-EOF-SWITCH PIC X VALUE "N".
01 COUNTERS.
05 REC-COUNTER-C PIC 9(3) VALUE 0.
05 REC-COUNTER-I PIC 9(3) VALUE 0.
05 REC-COUNTER-T PIC 9(3) VALUE 0.
05 REC-COUNTER-S PIC 9(3) VALUE 0.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
PERFORM 100-INITIALIZE.
PERFORM 200-SORT-TRANSACTIONS.
PERFORM 300-CUSTOMER-INVOICE
UNTIL S-EOF-SWITCH = "Y".
PERFORM 900-TERMINATE.
STOP RUN.
100-INITIALIZE.
OPEN I-O CUST-FILE.
READ CUST-FILE
AT END
MOVE "Y" TO C-EOF-SWITCH
NOT AT END
COMPUTE REC-COUNTER-C = REC-COUNTER-C + 1
END-READ.
OPEN I-O INV-FILE.
READ INV-FILE
AT END
MOVE "Y" TO I-EOF-SWITCH
NOT AT END
COMPUTE REC-COUNTER-I = REC-COUNTER-I + 1
END-READ.
OPEN INPUT TRANS-FILE.
READ TRANS-FILE
AT END
MOVE "Y" TO T-EOF-SWITCH
NOT AT END
COMPUTE REC-COUNTER-T = REC-COUNTER-T + 1
END-READ.
200-SORT-TRANSACTIONS.
SORT WORK-TRANS-FILE ON ASCENDING W-CUST
USING TRANS-FILE
GIVING SORTED-TRANS-FILE.
300-CUSTOMER-INVOICE.
DISPLAY S-CUST.
DISPLAY S-ITEM.
DISPLAY S-QTY.
DISPLAY S-SALE-CD.
DISPLAY " ".
READ SORTED-TRANS-FILE
AT END
MOVE "Y" TO S-EOF-SWITCH
NOT AT END
COMPUTE REC-COUNTER-S = REC-COUNTER-S + 1
END-READ.
900-TERMINATE.
DISPLAY "Number of Customers: " REC-COUNTER-C.
DISPLAY "Number of Transactions: " REC-COUNTER-T.
DISPLAY "Number of Inventory Items: " REC-COUNTER-I.
CLOSE CUST-FILE.
CLOSE INV-FILE.
CLOSE TRANS-FILE.
END PROGRAM PROJECT-2.
文件内容:
01001 Steve Howe 123 Topographic Rd London England 000.00
01002 Geddy Lee 4385 Xanadu Ln Toronto Canada 058.15
01003 Steve Hackett 16 Serpentine Dr London England 134.10
01005 Nancy Wilson 5763 Butterfly St Seattle Washington 018.95
01008 Andy Latimer 858 Sasquatch St Leeds England 857.44
01015 Dweezil Zappa 86 Yerbouti Blvd Los Angeles California 000.00
01019 Roine Stolt 2332 Retropolis Stockholm Sweden 069.95
01023 Tal Wilkenfeld 52525 Beck Way Sydney Australia 200.00
01044 Todd Rundgren 662 Utopia St Los Angeles California 157.21
01088 Mike Rutherford 91 N Broadway New York New York 000.00