我没有错误,我正在使用可视工作室进行编译。我有两个输入文件和两个输出文件,它们应该使用事务将经销商文件中的数据更新到经销商文件
program-id. FREDERICKBOWSERProgram3 as "CSDP 241 .Program3".
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT Dealer ASSIGN TO "Dealer.dat" ORGANIZATION IS SEQUENTIAL.
SELECT Trans ASSIGN TO "Trans.dat" ORGANIZATION IS SEQUENTIAL.
SELECT DealOut ASSIGN TO "Dealer-Out.TXT"
FILE STATUS IS DealOut-FILE-STATUS.
SELECT RejectOut ASSIGN TO "Reject.TXT"
FILE STATUS IS RejectOut-FILE-STATUS.
data division.
FILE SECTION.
FD Dealer.
01 INPUT1 PIC X(165).
FD Trans.
01 INPUT2 PIC X(32).
FD DealOut.
01 OUTPUT1 PIC X(165).
FD RejectOut.
01 OUTPUT2 PIC X(32).
working-storage section.
01 SWITCHES.
05 FIRST-EXECUTION-SWITCH PIC X VALUE "Y".
88 FIRST-EXECUTION VALUE "Y".
05 ALL-RECORDS-PROCESSED-SWITCH PIC X VALUE "N".
88 ALL-RECORDS-PROCESSED VALUE "Y".
01 PRINT-AREA.
03 Dealer-Number Pic X(8).
03 Dealer-Name.
05 Last-Name Pic X(25).
05 First-Name Pic X(15).
05 Middle-Name Pic X(10).
03 Address-Line-1 Pic X(38).
03 City Pic X(21).
03 State-Or-Country Pic X(5).
03 Postal-Code Pic 9(5).
03 Consignment-Percent Pic 9(3).
03 Last-Sold-Amount Pic S9(7)v99.
03 Last-Sold-Date Pic 9(8).
03 Sold-To-Date Pic S9(7)v99.
03 Commission-To-Date Pic S9(7)v99.
01 PRINT-AREA2.
03 Transaction-Date Pic 9(8).
03 Transaction-Text.
05 Transaction-Type Pic X(4).
05 Transaction-Dealer-Number Pic X(8).
03 Transaction-Price Pic S9(7)v99.
03 Transaction-Qty Pic 9(3).
01 FILE-STATUS-FIELDS.
05 DealOut-FILE-STATUS PIC XX.
88 DealOut-SUCCESSFUL VALUE "00".
05 RejectOut-FILE-STATUS PIC XX.
88 RejectOut-SUCCESSFUL VALUE "00".
01 NEWNEW.
05 CURRT-TRANS PIC S9(7)v99.
05 CURRT-COMM PIC 9(3)v99.
procedure division.
000-UPDATE-TRANS-MASTER.
OPEN INPUT Trans
EXTEND Dealer
OUTPUT DealOut
RejectOut.
MOVE LOW-VALUE TO Dealer-Number.
PERFORM 200-PROCESS-TRANS
UNTIL ALL-RECORDS-PROCESSED.
CLOSE Dealer
Trans
DealOut
RejectOut.
STOP RUN.
200-PROCESS-TRANS.
PERFORM 210-READ-TRANS.
PERFORM 220-PROCESS-DEALER
UNTIL Dealer-Number >= Transaction-Dealer-Number.
IF Dealer-Number = HIGH-VALUE
AND Transaction-Dealer-Number = HIGH-VALUE
SET ALL-RECORDS-PROCESSED TO TRUE
ELSE
IF INPUT1 = Transaction-Dealer-Number
PERFORM 250-APPLY-TRANSACTION
ELSE
PERFORM 260-WRITE-ERROR-TRANSACTION.
210-READ-TRANS.
READ Trans INTO PRINT-AREA2
AT END
MOVE HIGH-VALUE TO Transaction-Dealer-Number.
220-PROCESS-DEALER.
IF FIRST-EXECUTION
PERFORM 230-READ-OLD-DEALER
MOVE "N" TO FIRST-EXECUTION-SWITCH
ELSE
PERFORM 240-WRITE-NEW-DEALER.
PERFORM 230-READ-OLD-DEALER.
230-READ-OLD-DEALER.
READ Dealer INTO PRINT-AREA
AT END
MOVE HIGH-VALUE TO Dealer-Number.
240-WRITE-NEW-DEALER.
WRITE INPUT1 FROM PRINT-AREA.
IF NOT DealOut-SUCCESSFUL
DISPLAY "WRITE ERROR ON NEWMAST FOR ITEM NUMBER "
Dealer-Number
DISPLAY "FILE STATUS CODE IS " DealOut-FILE-STATUS
SET ALL-RECORDS-PROCESSED TO TRUE.
250-APPLY-TRANSACTION.
MULTIPLY Transaction-Qty BY Transaction-Price GIVING CURRT-TRANS.
ADD CURRT-TRANS TO Sold-To-Date.
MULTIPLY CURRT-TRANS BY Consignment-Percent GIVING CURRT-COMM.
ADD CURRT-COMM TO Commission-To-Date.
260-WRITE-ERROR-TRANSACTION.
WRITE OUTPUT2 FROM PRINT-AREA2.
IF NOT RejectOut-SUCCESSFUL
DISPLAY "WRITE ERROR ON ERRTRAN FOR ITEM NUMBER "
Transaction-Dealer-Number
DISPLAY "FILE STATUS CODE IS " RejectOut-FILE-STATUS
SET ALL-RECORDS-PROCESSED TO TRUE.
end program FREDERICKBOWSERProgram3.
答案 0 :(得分:1)
您正在使用OPEN EXTEND
代理商。
使用此方法是将记录添加到文件的“结尾”。之前的记录保持不变。
EXTEND
与OUTPUT
类似,不过它会保留现有数据,并允许您的程序添加到其中。
使用EXTEND,您不希望READ
该文件。而且你不希望更新记录。
您需要打开文件I-O
。
您应该对所有文件使用FILE STATUS
,并在每次IO完成后检查值。
您没有使用“范围分隔符”。在1985年它们被引入之前就可以了,但是对于新代码这些天你应该使用范围分隔符。
这是一个很好的例子,来自你的代码:
220-PROCESS-DEALER.
IF FIRST-EXECUTION
PERFORM 230-READ-OLD-DEALER
MOVE "N" TO FIRST-EXECUTION-SWITCH
ELSE
PERFORM 240-WRITE-NEW-DEALER.
PERFORM 230-READ-OLD-DEALER.
看倒数第二行。它以一个完整的句号结束,终止了IF的范围。下面一行缩进,好像它应该是IF的一部分,不是IF的一部分,它是无条件的。
当你这样编码时,这个错误就不那么容易了:
220-PROCESS-DEALER.
IF FIRST-EXECUTION
PERFORM 230-READ-OLD-DEALER
MOVE "N" TO FIRST-EXECUTION-SWITCH
ELSE
PERFORM 240-WRITE-NEW-DEALER
PERFORM 230-READ-OLD-DEALER
END-IF
.
请注意,我已经使句点终止的句点尽可能容易被发现,并且没有将它附加到任何代码行。您现在可以复制/粘贴该代码,而不必担心它是否应该保留句号/句号,因为没有一行代码。
答案 1 :(得分:0)
写完Procedure Division
后,当你关闭所有工作空间时,确保你使用了goback.
关键字
例如:
CLOSE Dealer
Trans
DealOut
RejectOut.
goback.