제목에서 알 수 있듯이 COBOL 프로그램에 원하는 출력을 얻는데 어려움이 있습니다. 이 프로그램은 파일에서 데이터를 가져 와서 특정 형식으로 출력합니다. 이것은 숙제를위한 것입니다. 프로그램을 실행할 때 이름 헤더, schoolID 헤더 및 열 헤더에 대해 작동합니다. 첫 번째 코스는 정상적으로 작동하고 출력은 하나씩 끊기 시작하고 다른 모든 출력은 엉망이됩니다. COBOL 파일 I/O 서식 지정
입력 파일 예
CMPS161 ALGORITHM DSGN/IMPLMNT I A 3.00 CMPS280 ALGORITHM DSGN/IMPLEM II B 3.00
출력 파일 바람직한 예
<Name> <schoolID> Course Title GR Earned CMPS161 ALGORITHM DSGN/IMPLMNT I A 3.00 CMPS280 ALGORITHM DSGN/IMPLEM II B 3.00
출력 실제 예
<Name> <schoolID> Course Title GR Earned CMPS161 ALGORITHM DSGN/IMPLMNT I A 0.00 MPS280 ALGORITHM DSGN/IMPLEM II B 0.00
IDENTIFICATION DIVISION.
PROGRAM-ID. P2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT myInFile ASSIGN TO "P2In.dat".
SELECT myOutFile ASSIGN TO "P2Out.dat".
DATA DIVISION.
FILE SECTION.
FD myInFile.
01 inRecord.
02 Course PIC X(13).
02 Title PIC X(32).
02 Grade PIC X(4).
02 Earned PIC Z9.99.
02 FILLER PIC X(3).
FD myOutFile.
01 outRecord.
02 myCourse PIC X(13).
02 myTitle PIC X(32).
02 myGrade PIC X(4).
02 myEarned PIC Z9.99.
02 FILLER PIC X(3).
WORKING-STORAGE SECTION.
01 E0F PIC X(3) VALUE "NO ".
01 NAME-HDR.
05 FILLER PIC X(10) VALUE "NAME HERE ".
01 SCHOOLID-HDR.
05 FILLER PIC X(8) VALUE "SCHOOLID"
01 COLUMN-HDR.
05 FILLER PIC X(6) VALUE "COURSE".
05 FILLER PIC X(6) VALUE SPACES.
05 FILLER PIC X(6) VALUE "TITLE".
05 FILLER PIC X(6) VALUE SPACES.
05 FILLER PIC X(6) VALUE "GR".
05 FILLER PIC X(6) VALUE SPACES.
05 FILLER PIC X(6) VALUE "EARNED".
PROCEDURE DIVISION.
MAIN-PROGRAM.
PERFORM HEADER.
PERFORM FILE-IO.
PERFORM CLOSING.
STOP RUN.
HEADER.
OPEN INPUT myInFile
OUTPUT myOutFile.
WRITE outRecord FROM NAME-HDR
AFTER ADVANCING 1 LINE.
WRITE outRecord FROM SCHOOLID-HDR
AFTER ADVANCING 1 LINE.
WRITE outRecord FROM COLUMN-HDR
AFTER ADVANCING 2 LINES.
MOVE SPACES TO outRecord.
WRITE outRecord
AFTER ADVANCING 1 LINE.
FILE-IO.
READ myInFile
AT END
MOVE "YES" TO EOF.
PERFORM PROCESS-RECORD
UNTIL EOF = "YES".
PROCESS-RECORD.
MOVE SPACES TO outRecord.
MOVE Course to myCourse.
MOVE Title to myTitle.
MOVE Grade to myGrade.
MOVE Earned to myEarned.
WRITE outRecord
AFTER ADVANCING 1 LINE.
READ myInFile
AT END
MOVE "YES" TO EOF.
CLOSING.
CLOSE myInFile
myOutFile.
데이터 레코드가 레코드의 데이터 정의보다 1 바이트 "짧습니다"가능성이 가장 높습니다. 그렇지 않다면 컴파일러에게 말하지 않았으므로 레코드 종료자가 바이트를 포함해야한다는 것을 기억하십시오. –
예 필자는 필자의 끝에있는 여유 공간과 줄 바꿈 문자를 포함하여 데이터 정의를 계산했습니다. 코스는 13 칸이며, 제목은 32이고, 성적은 4 칸이므로 나중에 계산을 위해 억압 된 숫자를 가질 수 있고 줄 종결자를 포함한 필러 지점에 3을 가질 수 있습니다. – CoryC
각하, 나는 너무 많은 공간을 포함하는 필러 값으로 고정 시켰습니다. 대단히 감사합니다. – CoryC