我想我搞砸了,當我搞砸了它試圖找出它爲什麼它沒有工作。它只讀取我的數據的第一行,然後結束。 (它打印頭,數據的第一線,所有的都在300-過程的記錄計算,做最後的標題截至報告。與我的循環不好的語法,但沒有在COBOL中拋出錯誤
FILE-CONTROL.
SELECT F01-INPUT-FILE ASSIGN TO 'I:\COBOL\EmployeePay.dat'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT F02-PRINT-FILE ASSIGN TO 'I:\COBOL\EmployeePay.out'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD F01-INPUT-FILE
RECORD CONTAINS 30 CHARACTERS
DATA RECORD IS F01-INPUT-RECORD.
01 F01-INPUT-RECORD.
05 F01-EMPLOYEE-NAME PIC X(18).
05 F01-EMPLOYEE-SSN PIC 9(9).
05 F01-GROSS-PAY PIC 9(3).
FD F02-PRINT-FILE
RECORD CONTAINS 86 CHARACTERS
DATA RECORD IS F02-PRINT-LINE-RECORD.
01 F02-PRINT-LINE-RECORD PIC X(86).
WORKING-STORAGE SECTION.
01 W01-DATA-REMAINS-SWITCH PIC X VALUE 'Y'.
01 W02-DETAIL-LINE.
05 PIC X(2) VALUE SPACES.
05 W02-EMPLOYEE-NAME PIC X(18).
05 PIC X(2) VALUE SPACES.
05 W02-EMPLOYEE-SSN PIC 9(9).
05 PIC X(7) VALUE SPACES.
05 W02-PAY-100S PIC 9.
05 PIC X(5) VALUE SPACES.
05 W02-PAY-50S PIC 9.
05 PIC X(4) VALUE SPACES.
05 W02-PAY-20S PIC 9.
05 PIC X(4) VALUE SPACES.
05 W02-PAY-10S PIC 9.
05 PIC X(4) VALUE SPACES.
05 W02-PAY-5S PIC 9.
05 PIC X(4) VALUE SPACES.
05 W02-PAY-1S PIC 9.
05 PIC X(3) VALUE SPACES.
05 W02-GROSS-PAY PIC 9(3).
05 PIC X(15).
01 W02-HEADER-LINE1.
05 PIC X(22) VALUE SPACES.
05 PIC X(24) VALUE SPACES.
05 PIC X(40) VALUE SPACES.
01 W02-HEADER-LINE2.
05 PIC X(2) VALUE SPACES.
05 PIC X(13) VALUE 'EMPLOYEE NAME'.
05 PIC X(20) VALUE SPACES.
05 PIC X(4) VALUE '$100'.
05 PIC X(3) VALUE SPACES.
05 PIC X(3) VALUE '$50'.
05 PIC X(2) VALUE SPACES.
05 PIC X(3) VALUE '$20'.
05 PIC X(2) VALUE SPACES.
05 PIC X(3) VALUE '$10'.
05 PIC X(3) VALUE SPACES.
05 PIC X(2) VALUE '$5'.
05 PIC X(3) VALUE SPACES.
05 PIC X(2) VALUE '$1'.
05 PIC X(3) VALUE SPACES.
05 PIC X(3) VALUE 'PAY'.
05 PIC X(15) VALUE SPACES.
01 W02-CLOSING-LINE.
05 PIC X(13) VALUE 'End Of Report'.
05 PIC X(73) VALUE SPACES.
01 PAY PIC 999V99.
PROCEDURE DIVISION.
PERFORM 100-OPEN-FILES.
PERFORM 200-WRITE-HEADING-LINES.
PERFORM 300-PROCESS-RECORDS
UNTIL W01-DATA-REMAINS-SWITCH = 'N'.
PERFORM 400-WRITE-FOOTER.
PERFORM 500-CLOSE-FILES.
100-OPEN-FILES.
OPEN INPUT F01-INPUT-FILE
OUTPUT F02-PRINT-FILE
READ F01-INPUT-FILE
AT END MOVE "N" TO W01-DATA-REMAINS-SWITCH
.
200-WRITE-HEADING-LINES.
MOVE W02-HEADER-LINE1 TO F02-PRINT-LINE-RECORD.
WRITE F02-PRINT-LINE-RECORD.
MOVE W02-HEADER-LINE2 TO F02-PRINT-LINE-RECORD.
WRITE F02-PRINT-LINE-RECORD.
300-PROCESS-RECORDS.
MOVE F01-EMPLOYEE-NAME TO W02-EMPLOYEE-NAME.
MOVE F01-EMPLOYEE-SSN TO W02-EMPLOYEE-SSN.
MOVE F01-GROSS-PAY TO W02-GROSS-PAY.
PERFORM 310-DO-CALCULATIONS.
MOVE W02-DETAIL-LINE TO F02-PRINT-LINE-RECORD.
WRITE F02-PRINT-LINE-RECORD.
READ F01-INPUT-FILE
AT END MOVE 'N' TO W01-DATA-REMAINS-SWITCH
END-READ.
310-DO-CALCULATIONS.
COMPUTE W02-PAY-100S = W02-GROSS-PAY/100
COMPUTE PAY = W02-GROSS-PAY - (W02-PAY-100S * 100)
COMPUTE W02-PAY-50S = PAY/50
COMPUTE PAY = PAY - (W02-PAY-50S * 50)
COMPUTE W02-PAY-20S = PAY/20
COMPUTE PAY = PAY - (W02-PAY-20S * 20)
COMPUTE W02-PAY-10S = PAY/10
COMPUTE PAY = PAY - (W02-PAY-50S * 10)
COMPUTE W02-PAY-5S = PAY/5
COMPUTE PAY = PAY - (W02-PAY-5S * 5)
COMPUTE W02-PAY-1S = PAY/1
.
400-WRITE-FOOTER.
MOVE W02-CLOSING-LINE TO F02-PRINT-LINE-RECORD.
WRITE F02-PRINT-LINE-RECORD.
500-CLOSE-FILES.
CLOSE F01-INPUT-FILE
F02-PRINT-FILE.
的單位計算不得不在那裏,我明白了使用它只是一個數學的東西,我被卡住了,他們現在工作=)
所以,也許我誤解了你的答案,但修復它並沒有改變任何東西。它仍然只返回文件中的一行數據並結束。
什麼語法不好?注意它應該是'直到W01-DATA-REMAINS-SWITCH =「N」'。 – EJP
對你的其他問題的任何反饋?我看到你已經保存了大量的'計算',包括除以1。只對傳球感興趣?標題是什麼?你在文字上犯了一個錯字。你如何期望編譯器,任何編譯器或解釋器或其他東西以某種方式將其視爲「語法」問題?建議您更改@EJP,並將其傳入。 –