我正在尝试按项目名称对一组项目进行排序,这是 SELECT 语句:
SELECT ITEMREC ASSIGN TO 'GROCERY.DAT'.
SELECT SORT-ITEMREC ASSIGN TO SYSWORK.
SELECT OUT-ITEMREC ASSIGN TO 'SORTED_GROCERY.DAT'.
这是文件部分的代码块:
FD ITEMREC.
01 item.
02 itemnum PIC X(10).
02 itemname PIC X(20).
02 itemmanufacturer PIC X(20).
02 itemquantity PIC 99 VALUE ZEROS.
02 itemprice PIC 99 VALUE ZEROS.
SD SORT-ITEMREC.
01 sort-item.
02 itemname2 PIC X(20).
02 filler PIC X(34).
FD OUT-ITEMREC.
01 out-item.
02 itemname3 PIC X(20).
02 filler PIC X(34).
这是 PROCEDURE DIVISION 的排序语句:
SORT SORT-ITEMREC
ON ASCENDING KEY itemname
USING ITEMREC
GIVING OUT-ITEMREC.
这是“SORTED_GROCERY.DAT”的打印:
DISPLAY "".
PERFORM Table-header.
OPEN INPUT OUT-ITEMREC.
PERFORM UNTIL EOF=1
READ OUT-ITEMREC
AT END MOVE 1 TO EOF
NOT AT END PERFORM PRINT-DATA
END-PERFORM.
CLOSE OUT-ITEMREC.
PERFORM Table-footer.
STOP RUN.
“SORTED_GROCERY.DAT”的内容是排序后的值,但在打印时,它只打印 DAT 文件的第一个条目,并替换所有其他值。但是当我通过在上面的代码块中将“OUT-ITEMREC”替换为“ITEMREC”来打印“GROCERY.DAT”时,它打印正常。
我的代码有什么问题?谢谢!
更新:
Table-header.
DISPLAY "Items bought by " WITH NO ADVANCING.
IF csex = "M" THEN
DISPLAY "Mr. " WITH NO ADVANCING
END-IF
IF csex = "F" AND cstatus = "S" THEN
DISPLAY "Ms. " WITH NO ADVANCING
END-IF
IF csex = "F" AND cstatus = "M" THEN
DISPLAY "Mrs. " WITH NO ADVANCING
END-IF
DISPLAY cname WITH NO ADVANCING.
DISPLAY ":".
DISPLAY "".
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "".
DISPLAY "[Number of Pieces] " WITH NO ADVANCING.
DISPLAY "[Item Name] " WITH NO ADVANCING.
DISPLAY "[Manufacturer] " WITH NO ADVANCING.
DISPLAY "[Number of Pieces*Price]" WITH NO ADVANCING.
DISPLAY "".
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "====================" WITH NO ADVANCING.
DISPLAY "====================" WITH NO ADVANCING.
PRINT-DATA.
DISPLAY itemquantity WITH NO ADVANCING.
DISPLAY " " WITH NO ADVANCING.
DISPLAY itemname WITH NO ADVANCING.
DISPLAY " " WITH NO ADVANCING.
DISPLAY itemmanufacturer WITH NO ADVANCING.
DISPLAY " " WITH NO ADVANCING.
DISPLAY itemquantity WITH NO ADVANCING.
DISPLAY "*" WITH NO ADVANCING
DISPLAY itemprice WITH NO ADVANCING.
DISPLAY "".
MULTIPLY itemprice BY itemquantity GIVING temp.
ADD temp total GIVING total.