我想编写一个cobol程序来读取带有4个字段(EMPID,NAME,STREAM,GRADE)的文件EMP-GRADE,并显示在输出中得分为'A'的员工的详细信息。我使用在线Cobol编译器。COBOL中的文件处理
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPFILE ASSIGN TO 'input.txt'
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.
SELECT EMPA ASSIGN TO 'util.cobc'
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD EMPFILE.
01 NEWFILE.
05 FS-EMPID PIC 9(6).
05 FILLER PIC X(50).
05 FS-NAME PIC A(10).
05 FILLER PIC X(50).
05 FS-STREAM PIC A(10).
05 FILLER PIC X(50).
05 FS-GRADE PIC A(1).
05 FILLER PIC X(50).
FD EMPA.
01 OUTFILE.
05 FS-EMPID-OUT PIC 9(6).
05 FILLER PIC X(50).
05 FS-NAME-OUT PIC A(10).
05 FILLER PIC X(50).
05 FS-STREAM-OUT PIC A(10).
05 FILLER PIC X(50).
05 FS-GRADE-OUT PIC A(1).
05 FILLER PIC X(50).
WORKING-STORAGE SECTION.
01 WS-EOF PIC A(1) VALUE "N".
01 WS-FILE-STATUS PIC X(2).
PROCEDURE DIVISION.
MAIN-PARA.
OPEN INPUT EMPFILE
OPEN OUTPUT EMPA
PERFORM READ-PARA THRU READ-PARA-EXIT
Perform Until WS-EOF = "Y"
IF FS-GRADE='A'
MOVE NEWFILE TO OUTFILE
WRITE OUTFILE
END-WRITE
DISPLAY OUTFILE
ELSE
DISPLAY 'NO A GRADE STUDENT IN THE LIST'
END-IF
PERFORM READ-PARA THRU READ-PARA-EXIT
END-PERFORM
CLOSE EMPFILE.
CLOSE EMPA.
STOP RUN.
MAIN-PARA-EXIT.
EXIT.
READ-PARA.
READ EMPFILE
AT END MOVE "Y" TO WS-EOF
NOT AT END DISPLAY NEWFILE
END-READ.
READ-PARA-EXIT.
EXIT.
上面的是我更新代码,然后我在“input.txt中”给输入和我输出如下
11111 AISHU JAVA B
22222 RANJU MAINF A
NO甲年级学生在列表”
你为什么不从SorceForge下载GnuCOBOL。我不认为你可以用任何在线编译站点写一个文件(但我可能是错的)。你无法正确地得到输出,因为你只有一个WRITE发生在输入文件结束后,并且只有在最后一个记录仍然可用时才会执行(取决于编译器),并且只有当它是A 。 – 2014-10-19 20:31:55
而不是显示整个记录,为什么你不显示你感兴趣的领域,只是,这是一个简单的方法(有时候人们喜欢编译/链接/重新运行以节省计算工作量)看到如果您的测试数据符合您的字段定义。从你展示的样本来看,这是一个很大的平坦的NO。 – 2014-10-20 07:42:33
@BillWoodger如您所说,我下载了脱机COBOL编译器,并编译了我的代码,但我对此有所疑问,在离线编译器中,我应该如何添加输入文件和输出文件? – 2014-10-23 06:11:17