File AccessThe Cobol program requires many more lines of code to deal with opening, closing, and reading files. The Powerhouse script requires less because the files and all of the fields in each file are already fully defined in the Powerhouse Data Dictionary.
Thus, the single line Powerhouse
SELECT ADMISSION-FILE
ASSIGN TO RMS
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS ADMIS-KEY
ALTERNATE RECORD KEY IS ADMIS-ALTERNATE-KEY
WITH DUPLICATES
FILE STATUS IS IO-FILE-STATUS.
FD ADMISSION-FILE
VALUE OF ID IS ADMIS-FILE-ID.
*
01 ADMISSION-ITEM.
02 ADMIS-KEY.
03 ADMIS-ID PICTURE X(10).
02 ADMIS-ALTERNATE-KEY.
03 ADMIS-NAME.
04 ADMIS-LETTER OCCURS 25 TIMES PICTURE X.
02 ADMIS-PERMANENT-ADDRESS-DATA.
03 ADMIS-ADDRESS-1 PICTURE X(25).
03 ADMIS-ADDRESS-2 PICTURE X(25).
03 ADMIS-CITY PICTURE X(18).
03 ADMIS-STATE PICTURE X(2).
03 ADMIS-ZIP PICTURE 9(5).
03 ADMIS-PHONE.
04 ADMIS-AREA-CODE PICTURE 9(3).
04 ADMIS-PHONE-NUMBER PICTURE X(7).
03 ADMIS-COUNTY PICTURE X(18).
03 ADMIS-COUNTY-CODE PICTURE X(3).
02 ADMIS-STATUS-DATA.
03 ADMIS-TERRITORY PICTURE X(2).
03 ADMIS-COUNSELOR PICTURE X(4).
03 ADMIS-CONTACT-STATUS OCCURS 6 TIMES
INDEXED BY ADMIS-CONTACT-INDEX.
04 ADMIS-CONTACT-TYPE PICTURE X(2).
04 ADMIS-CONTACT-DATE PICTURE 9(6).
04 ADMIS-CONTACT-RESP PICTURE X.
03 ADMIS-APPLICATION-STATUS.
04 ADMIS-STATUS PICTURE X(2).
88 COMPLETED-APP VALUE
'AP','AD','DP','DE','DJ','AC','PP','CA',
'CD','CC','ND','CS','DD','QD'.
88 ACCEPTED-FOR-ADMISS VALUE 'AC','PP'.
04 ADMIS-STATUS-DATE PICTURE 9(6).
03 ADMIS-RECOMMENDATIONS PICTURE X.
03 ADMIS-SCHOLAR PICTURE X.
03 ADMIS-ATHLETE PICTURE X.
03 ADMIS-FEE-PAID PICTURE X.
02 ADMIS-PERSONAL-DATA.
03 ADMIS-PERSONAL-DATA-DEMO-1.
04 ADMIS-BIRTH-DATE PICTURE 9(6).
04 ADMIS-SEX PICTURE X.
04 ADMIS-ETHNIC-CODE PICTURE X.
04 ADMIS-MARITAL-STATUS PICTURE X.
04 ADMIS-RELIGION PICTURE X.
03 ADMIS-PERSONAL-DATA-DEMO-2.
04 ADMIS-SOURCE PICTURE X.
04 ADMIS-CITIZEN PICTURE X.
04 ADMIS-HANDICAP PICTURE X.
04 ADMIS-STATE-RESIDENT PICTURE X.
04 ADMIS-INTEREST OCCURS 6 TIMES
INDEXED BY ADMIS-INTEREST-INDEX PIC X(2).
02 ADMIS-APPLICATION-DATA.
03 ADMIS-TERM PICTURE X(3).
03 ADMIS-MAJOR PICTURE X(2).
03 ADMIS-COLLEGE PICTURE X(2).
03 ADMIS-TIME PICTURE X.
03 ADMIS-PERIOD PICTURE X.
03 ADMIS-FINANCIAL-AID PICTURE X.
03 ADMIS-RESIDENCE PICTURE X.
03 ADMIS-PARENT-ATTENDED PICTURE X.
03 ADMIS-REASON-FOR-CHOOSING PICTURE X.
03 ADMIS-ENTRANCE-CODE PICTURE X.
03 ADMIS-CREDIT-EARNED PICTURE S9(3)V9(2).
03 ADMIS-CLASS PICTURE 9.
02 ADMIS-PREVIOUS-COLLEGE.
03 ADMIS-TRANSFER-COLLEGE-CODE PICTURE X(6).
03 ADMIS-TRANSFER-COLLEGE-DEGREE PICTURE X.
03 ADMIS-TRANSFER-DATE.
04 ADMIS-TRANSFER-MONTH-GRAD PICTURE 9(2).
04 ADMIS-TRANSFER-YEAR-GRAD PICTURE 9(2).
03 ADMIS-TRANSFER-GPA PICTURE S9V9(2).
03 ADMIS-TRANSFER-CODE PICTURE X.
03 ADMIS-TRANSFER-TRANSCRIPT PICTURE X.
02 ADMIS-HIGH-SCHOOL-DATA.
03 ADMIS-HS-CODE PICTURE X(6).
03 ADMIS-HS-TYPE PICTURE X.
03 ADMIS-HS-DATE.
04 ADMIS-HS-MONTH-GRAD PICTURE 9(2).
04 ADMIS-HS-YEAR-GRAD PICTURE 9(2).
03 ADMIS-HS-GPA PICTURE S9V9(2).
03 ADMIS-HS-RANKING.
04 ADMIS-HS-RANK PICTURE 9(4).
04 ADMIS-HS-SIZE PICTURE 9(4).
03 ADMIS-HS-TRANSCRIPT PICTURE X.
02 ADMIS-TEST-DATA.
03 ADMIS-TEST PICTURE X(4).
03 ADMIS-TEST-COMPOSITE PICTURE 9(4).
03 ADMIS-TEST-SUB-SCORE OCCURS 4 TIMES PICTURE 9(3).
02 ADMIS-WORK-PHONE-NUM.
03 ADMIS-WORK-PHONE-AREA-CODE PICTURE 9(3).
03 ADMIS-WORK-PHONE-DIGITS PICTURE X(7).
02 ADMIS-SECOND-MAJOR PICTURE X(2).
02 ADMIS-MINOR PICTURE X(2).
02 ADMIS-LANGUAGE PICTURE X(2).
02 FILLER PICTURE X(2).
02 ADMIS-SITE PICTURE X(6).
02 ADMIS-CITIZENSHIP-COUNTRY PICTURE X(2).
02 ADMIS-EXPANDED-SOURCE PIC 9(6).
02 FILLER PICTURE X(45).
02 ADMIS-ON-LINE-STATUS PICTURE X.
02 ADMIS-EMPLOYEE-NO PICTURE X(4).
OPEN INPUT ADMISSION-FILE ALLOWING ALL.
*
*
GET-NEXT-ADMISSION-ITEM.
MOVE 'N' TO FILE-LOCK-STATUS.
MOVE 'N' TO INVALID-ADMIS-KEY-FLAG.
READ ADMISSION-FILE NEXT
AT END
MOVE 'Y' TO INVALID-ADMIS-KEY-FLAG
MOVE HIGH-VALUES TO ADMISSION-ITEM.
IF FILE-LOCK-ERROR-OCCURRED
GO TO GET-NEXT-ADMISSION-ITEM.
CLOSE ADMISSION-FILE.
OutputPowerhouse uses a simple report statement to generate lines of output. Powerhouse itself decides how to format (lining up columns, column and page headers, etc.) each line. > report id name ad-source class hs-code entrance-code app-status However, in the Cobol program all of this is specified by the programmer with code such as this:
*
01 DETAIL-LINE.
02 PRINT-ID PIC X(10).
02 FILLER PIC X(5) VALUE SPACES.
02 PRINT-NAME PIC X(25).
02 FILLER PIC X(5) VALUE SPACES.
02 PRINT-SOURCE PIC X.
02 FILLER PIC X(5) VALUE SPACES.
02 PRINT-CLASS PIC X.
02 FILLER PIC X(5) VALUE SPACES.
02 PRINT-HS-CODE PIC X(6).
02 FILLER PIC X(5) VALUE SPACES.
02 PRINT-ENTRANCE-CODE PIC X.
02 FILLER PIC X(5) VALUE SPACES.
02 PRINT-STATUS PIC X(2).
MOVE SELECT-ID TO PRINT-ID.
MOVE SELECT-NAME TO PRINT-NAME.
MOVE SELECT-SOURCE TO PRINT-SOURCE.
MOVE SELECT-CLASS TO PRINT-CLASS.
MOVE SELECT-HS-CODE TO PRINT-HS-CODE.
MOVE SELECT-ENTRANCE-CODE TO PRINT-ENTRANCE-CODE.
MOVE SELECT-STATUS TO PRINT-STATUS.
WRITE PRINT-ITEM FROM DETAIL-LINE.
ADD 1 TO LINE-COUNT.
ADD 1 TO SOURCE-COUNT.
ADD 1 TO REPORT-COUNT.
Control BreaksPowerhouse makes control breaks and footers easy to specify. > footing at ad-source skip 2 "Total for: " ad-source "=" count skip 3 > final footing "Total enrollment " count Cobol requires greater specification by the programmer.
*
01 TOTAL-LINE.
02 FILLER PIC X(17) VALUE 'TOTAL FOR STATUS '.
02 PRINT-PREVIOUS-SOURCE PIC X.
02 FILLER PIC X(2) VALUE ': '.
02 PRINT-SOURCE-COUNT PIC Z(5)9.
*
01 FINAL-LINE.
02 FILLER PIC X(15) VALUE 'REPORT TOTAL: '.
02 PRINT-REPORT-COUNT PIC Z(7)9.
*
01 PREVIOUS-SOURCE PIC X.
*
01 SOURCE-COUNT PIC 9(6).
01 REPORT-COUNT PIC 9(8).
IF SELECT-SOURCE NOT = PREVIOUS-SOURCE
PERFORM DO-CONTROL-BREAK.
IF LINE-COUNT > 47
PERFORM PRINT-HEADERS.
MOVE SELECT-SOURCE TO PREVIOUS-SOURCE.
*
*
DO-CONTROL-BREAK.
MOVE SOURCE-COUNT TO PRINT-SOURCE-COUNT.
MOVE PREVIOUS-SOURCE TO PRINT-PREVIOUS-SOURCE.
WRITE PRINT-ITEM FROM TOTAL-LINE AFTER 2.
MOVE SPACES TO PRINT-ITEM.
WRITE PRINT-ITEM.
ADD 3 TO LINE-COUNT.
MOVE ZERO TO SOURCE-COUNT.
*
*
DO-FINAL-LINE.
PERFORM DO-CONTROL-BREAK.
MOVE REPORT-COUNT TO PRINT-REPORT-COUNT.
WRITE PRINT-ITEM FROM FINAL-LINE AFTER 2.
If-Else LogicRecord selection tends to be similar.
> select if term = "961" and (app-status="AC" or app-status="PP")
IF ADMIS-TERM = CURRENT-WORKING-TERM
AND (ADMIS-STATUS = 'AC' OR ADMIS-STATUS = 'PP')
PERFORM PROCESS-SELECT-ITEM.
|