COBOL:语法错误,意外排序,期望标识符和延续字符



我刚开始为我的COBOL类使用COBOL,我不知道第9、30和62行有什么问题。希望你能帮助我。谢谢你。

******************************************************************
* Author: Emil
* Date: 12/02/21
* Purpose: Sorting and Debugging
* Tectonics: cobc
******************************************************************
PROGRAM-ID. InputSort.
PROCEDURE DIVISION
Using SORT and INPUT PROCEDURE. The program accepts records
* from the user and RELEASEs them to the work file
*      where they are sorted. This program
*      allows student records to be entered in any order but
*      produces a file sequenced on ascending StudentId.
ENVIRONMENT DIVISION
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT StudentFile ASSIGN TO "SORTSTUD.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT WorkFile ASSIGN TO "WORK.TMP".

DATA DIVISION.
FILE SECTION.
FD StudentFile.
01 StudentDetails      PIC X(30).
* The  StudentDetails record has the description shown below.
* But  in this program we don't need to refer to any of the items in
* the  record and so we have described it as PIC X(32)
* 01   StudentDetails
*      02  StudentId       PIC 9(7).
*      02  StudentName.
*        03 Surname      PIC X(8).
*        03 Initials     PIC XX.
*      02  DateOfBirth.
*        03 YOBirth      PIC 9(4).
*        03 MOBirth      PIC 9(2).
*        03 DOBirth      PIC 9(2).
*      02  CourseCode      PIC X(4).
*      02  Gender          PIC X.
SD WorkFile.
01 WorkRec.
02  WStudentId       PIC 9(7).
02  FILLER           PIC X(23).

PROCEDURE DIVISION.
Begin.
SORT WorkFile ON ASCENDING KEY WStudentId
INPUT PROCEDURE IS GetStudentDetails
GIVING StudentFile.
STOP RUN.

GetStudentDetails.
DISPLAY "Enter student details using template below."
DISPLAY "Enter no data to end.".
DISPLAY "Enter - StudId, Surname, Initials, YOB, MOB, DOB, Course, Gender"
DISPLAY "NNNNNNNSSSSSSSSIIYYYYMMDDCCCCG"
ACCEPT  WorkRec.
PERFORM UNTIL WorkRec = SPACES
RELEASE WorkRec
ACCEPT WorkRec
END-PERFORM.

一般注意事项:注意句号。它们是有意义的。在COBOL中,它们中的许多都是可选的,但有些则不是。要始终如一地把它们放在哪里。在程序划分中,这一点尤为重要!

第8行,PROCEDURE DIVISION。这是第一个问题。依次为IDENTIFICATIONENVIRONMENTDATAPROCEDURE。在这里使用PROCEDURE DIVISION是不正常的,并且错过了所需的时间。也许你指的是IDENTICATION DIVISION.,但即使这样,它也应该是第一个语句,但用于注释。

第9行及以下:通常像这样的注释由REMARKS.标题进行,或者将它们全部(包括第9行)作为注释。

第30行:我不认为注释有问题。你是说别的台词吗?

第62行:我不觉得有什么问题。错误信息是什么?

但是你的执行循环要么永远不会开始,要么永远不会结束,因为循环内部没有任何东西(PERFORMEND-PERFORM)改变WorkRec。也许您想在循环中添加一个额外的ACCEPT语句,在PERFORM语句上使用WITH TEST AFTER子句,并将ACCEPT语句移动到循环中。

最新更新