我想編寫一個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