สัปดาห์ที่ 3 CH 6 : DATA DIVISION
DATA DIVISION บอกรายละเอียดเกี่ยวกับข้อมูลทั้งหมดที่ใช้ในโปรแกรม เช่น รายละเอียดแต่ละ File , Record ของ File นั้นประกอบด้วย Fieldอะไรบ้าง มีลักษณะอย่างไร BC324 : COBOL Programming CH 6 : DATA DIVISION
DATA DIVISION ประกอบด้วย 2 Section 1. File Section : อธิบายลักษณะของ File และ Record ที่อยู่ใน File นั้น แบ่งเป็น 2 Paragraph 1.1 File Description Paragraph (FD) : อธิบาย ลักษณะของ File 1.2 Record Description Paragraph : อธิบายลักษณะ ของ Record 2. Working-Storage Section : อธิบายลักษณะของ Record หรือกลุ่มข้อมูลต่างๆ ที่ไม่ได้อยู่ใน File แต่จำเป็นต้องใช้ในระหว่างการประมวลผล BC324 : COBOL Programming CH 6 : DATA DIVISION
ตัวอย่าง: . * DATA DIVISION. WORKING-STORAGE SECTION. 77 Num1 PIC 9 VALUE ZEROS. 77 Num2 PIC 9 VALUE ZEROS. 77 Result PIC 99 VALUE ZEROS. BC324 : COBOL Programming CH 6 : DATA DIVISION
ตัวอย่าง: SELECT INVENTORY-FILE ASSIGN TO DISK. SELECT ERROR-LIST ASSIGN TO PRINTER. * DATA DIVISION. FILE SECTION. FD INVENTORY-FILE . FD ERROR-LIST BC324 : COBOL Programming CH 6 : DATA DIVISION
FILE SECTION
File Description Paragraph |-A-| - B ------------------------------------------ SELECT INVENTORY-FILE ASSIGN TO DISK. * DATA DIVISION. FILE SECTION. FD INVENTORY-FILE LABEL RECORD IS STANDARD DATA RECORD IS INV-REC RECORD CONTAINS 80 CHARACTERS VALUE OF FILE-ID IS “C:\INV.DAT”. File Description Paragraph
Field ที่ไม่มี Field ย่อยใดๆ เป็นองค์ประกอบ Files, Records, Fields. File Field ที่ประกอบด้วย Field ย่อยๆ Record ....... Record Field ที่ไม่มี Field ย่อยใดๆ เป็นองค์ประกอบ (Elementary Item) Item Group Item (Field) (Field) Item Item (Field) โครงสร้างของแฟ้มข้อมูลใดๆ ประกอบด้วยกลุ่มของ Record ในเรื่องเดียวกัน และแต่ละ Record ประกอบด้วยกลุ่มของ Field ใน COBOL จะยึดโครงสร้างดังกล่าวในการอธิบายลักษณะข้อมูล BC324 : COBOL Programming CH 6 : DATA DIVISION
File STUDENTS.DAT Record #1 Record #5 Field StudId StudName DateOfBirth 9723456 COUGHLAN 10091961 9724567 RYAN 31121976 9534118 COFFEY 23061964 9423458 O'BRIEN 03111979 9312876 SMITH 12121976 STUDENTS.DAT File Record #1 Record #5 Field DATA DIVISION. FILE SECTION. FD StudentFile. 01 StudentDetails. 02 StudId PIC 9(7). 02 StudName PIC X(8). 02 DateOfBirth PIC X(8). BC324 : COBOL Programming CH 6 : DATA DIVISION
Description Paragraph | -A- | - B -------------------------------------- Record Description Paragraph DATA DIVISION. FILE SECTION. FD STUDENT-FILE LABEL RECORD IS STANDARD DATA RECORD IS STUDENT-REC. 01 STUDENT-REC. 05 ID1 PIC X(03). 05 FILLER PIC X(01) VALUE SPACE. 05 NAME1 PIC A(06). STUDENT-REC ID1 FILLER (= ช่องว่าง) NAME1
Declaring DATA in COBOL 01 Num1 PIC 999 VALUE ZEROS. BC324 : COBOL Programming CH 6 : DATA DIVISION
Level Number ที่มีค่ามากกว่า จะแสดงถึงลำดับชั้นที่ ต่ำกว่า LEVEL Numbers Level Number ใช้สำหรับแสดงถึงโครงสร้างของข้อมูล Level Number มีค่า 01 - 49, 77 , 88 Level Number ที่มีค่ามากกว่า จะแสดงถึงลำดับชั้นที่ ต่ำกว่า Field ที่อยู่ในระดับเดียวกันใช้ Level Number เท่ากัน Level Number ไม่จำเป็นต้องเพิ่มทีละ หนึ่ง BC324 : COBOL Programming CH 6 : DATA DIVISION
LEVEL Numbers 01 : ใช้สำหรับอธิบาย Record (บอกชื่อ Record) ซึ่ง เป็น Level สูงสุด 02-49 : ใช้สำหรับอธิบาย field ย่อยๆของ Record 77 : ใช้สำหรับอธิบาย field ที่ไม่มีโครงสร้างลำดับชั้น หรือไม่มี ความสัมพันธ์กับ field อื่นใดเลย (ไม่มี field ย่อยเป็นองค์ประกอบ และไม่เป็นองค์ประกอบของ field อื่นใด 88 : ใช้กำหนดเงื่อนไขต่าง ๆ ให้กับ field ใน Level Number ก่อนหน้า BC324 : COBOL Programming CH 6 : DATA DIVISION
data-name / FILLER data name : ชื่อของ Record หรือ Group Item หรือ Elementary Item ซึ่งเป็นการอ้างถึงเนื้อที่ใน หน่วยความจำ FILLER : ใช้ในกรณีที่ข้อมูลบริเวณนั้น ไม่ได้ใช้อ้างอิง ในโปรแกรม จึงไม่ต้องระบุชื่อ แต่บริเวณดังกล่าวไม่ได้ แปลว่าเป็นพื้นที่ว่าง (อาจจะว่างหรือไม่ก็ได้) BC324 : COBOL Programming CH 6 : DATA DIVISION
COBOL ‘PICTURE’ Clauses PICTURE : บอกลักษณะของ data name ว่าเก็บข้อมูล ประเภทใด ขนาดเท่าไร สัญลักษณ์ที่ใช้ใน PICTURE แบ่งเป็น 3 ประเภท 1. Data Character Symbol : สัญลักษณ์ที่แสดงถึง ลักษณะของข้อมูล ได้แก่ A , X , 9 2. Operations Symbol : สัญลักษณ์ที่ใช้ในการ คำนวณ ได้แก่ S , V , P (ไม่มีผลกับขนาดของ data name) 3. Editing Symbol : สัญลักษณ์ที่ใช้ในการพิมพ์ ได้แก่ Z , * , $ , + , - , ........... (มีผลกับขนาดของ data name) BC324 : COBOL Programming CH 6 : DATA DIVISION
COBOL ‘PICTURE’ Clauses ตัวอย่าง Data Character Symbol PICTURE ลักษณะข้อมูล ตัวอย่างข้อมูล PIC 9(3) ตัวเลขเท่านั้น (Max : 18 digit) 456 PIC A(7) ตัวอักษร A-Z และช่องว่าง ‘COBOLbb’ PIC X(6) ตัวเลข , ตัวอักษร และ - (hyphen) ‘BC-324’ BC324 : COBOL Programming CH 6 : DATA DIVISION
COBOL ‘PICTURE’ Clauses ตัวอย่าง Operations Symbol (ไม่ใช้เนื้อที่ในการเก็บ) PICTURE ลักษณะข้อมูล ข้อมูลในหน่วยความจำ ใช้เนื้อที่ 77 NUM PIC S9(3) VALUE -500. ตัวเลขที่อาจมีทั้งค่าบวกและค่าลบ 500- 3 byte 77 NUM PIC S9(3) VALUE 500. “ 500 77 NUM PIC 9(3) VALUE -500. 77 NUM PIC 9(2)V99 VALUE 10.45. แสดงตำแหน่งของจุดทศนิยม 10^45 4 byte
COBOL ‘PICTURE’ Clauses ตัวอย่าง Operations Symbol (ไม่ใช้เนื้อที่ในการเก็บ) PICTURE ลักษณะข้อมูล ข้อมูลในMemory ใช้คำนวณ ใช้เนื้อที่ 77 NUM PIC PP99 VALUE 23. แสดงตำแหน่งเลขศูนย์สมมุติ 23 ^0023 2 byte 77 NUM PIC 99PP VALUE 23. 2300^
COBOL ‘PICTURE’ Clauses ตัวอย่าง Editing Symbol PICTURE ลักษณะข้อมูล ข้อมูล ผลลัพธ์ PIC ZZ9 บอกตำแหน่งที่จะแทนที่เลข 0 (ที่อยู่หน้าตัวเลข) ด้วยช่องว่าง 007 bb7 “ 027 b27 PIC Z99 b07 PIC **9 บอกตำแหน่งที่จะแทนที่เลข 0 (ที่อยู่หน้าตัวเลข) ด้วย * **7 PIC $ZZ9 เติม $ หน้าตัวเลข $bb7 BC324 : COBOL Programming CH 6 : DATA DIVISION
Question ? Data Character Symbol & Operations Symbol ตัวอย่างข้อมูล PICTURE กินที่ในหน่วยความจำ 1234 ‘JUN’ ’59’ ’BKKbb’ ’BKKb10100’ -20.50 +33.123 Score 0-100 PIC 9(4) 4 byte PIC A(3) / PIC X(3) 3 byte PIC X(2) 2 byte 5 byte PIC X(5) 9 byte PIC X(9) PIC S9(2)V99 4 byte PIC S9(2)V999 PIC 9(2)V999 5 byte PIC 9(3) 3 byte BC324 : COBOL Programming CH 6 : DATA DIVISION
Question ? Editing Symbol ตัวอย่างข้อมูล ผลลัพธ์ PICTURE ZZ9 007 Z99 012^00 000 **99 0012 ***9 bb7 b07 bb7 b12.00 bbb bb0 **12 **12 BC324 : COBOL Programming CH 6 : DATA DIVISION
Question ? Editing Symbol ตัวอย่างข้อมูล ผลลัพธ์ PICTURE ***9 0010 0000 **** 0100 $999 123 012 $Z99 $ZZZ 000 **10 ***0 **** *100 $123 $012 $b12 bbbb BC324 : COBOL Programming CH 6 : DATA DIVISION
ตัวอย่าง File Section FD STUDENT-FILE LABEL RECORD IS STANDARD DATA DIVISION. FILE SECTION. FD STUDENT-FILE LABEL RECORD IS STANDARD DATA RECORD IS STUDENT-REC. 01 STUDENT-REC. 02 SID PIC X(03). 02 SNAME. 07 FIRST-NAME PIC A(5). 07 LAST-NAME PIC A(10). BC324 : COBOL Programming CH 6 : DATA DIVISION
ตัวอย่าง File Section FD STUDENT-FILE LABEL RECORD IS STANDARD DATA DIVISION. FILE SECTION. FD STUDENT-FILE LABEL RECORD IS STANDARD DATA RECORD IS STUDENT-REC. 01 STUDENT-REC. 05 SID PIC X(03). 05 SNAME. 10 FIRST-NAME PIC A(5). 10 LAST-NAME PIC A(10). BC324 : COBOL Programming CH 6 : DATA DIVISION
COBOL ‘PICTURE’ Clauses PIC 99999 เหมือนกับ PIC 9(5) PIC 9999V999 เหมือนกับ PIC 9(4)V9(3) PIC XXXAA เหมือนกับ PIC X(3)A(2) PIC 999XXX เหมือนกับ PIC 9(3)X(3) PIC ZZZ.ZZ เหมือนกับ PIC Z(3).Z(2) PIC ZZZ,999.99 เหมือนกับ PIC Z(3),9(3).9(2) BC324 : COBOL Programming CH 6 : DATA DIVISION
ตัวอย่าง File Section FD STUDENT-FILE LABEL RECORD IS STANDARD DATA DIVISION. FILE SECTION. FD STUDENT-FILE LABEL RECORD IS STANDARD DATA RECORD IS STUDENT-REC. 01 STUDENT-REC. 05 SID PIC X(03). 05 SNAME. 10 FIRST-NAME PIC A(5). 10 LAST-NAME PIC A(10). BC324 : COBOL Programming CH 6 : DATA DIVISION
WORKING-STORAGE SECTION
DATA DIVISION ประกอบด้วย 2 Section 1. File Section : อธิบายลักษณะของ File และ Record ที่อยู่ใน File นั้น แบ่งเป็น 2 Paragraph 1.1 File Description Paragraph (FD) : อธิบาย ลักษณะของ File 1.2 Record Description Paragraph : อธิบายลักษณะ ของ Record 2. Working-Storage Section : อธิบายลักษณะของ Record หรือกลุ่มข้อมูลต่างๆ ที่ไม่ได้อยู่ใน File แต่จำเป็นต้องใช้ในระหว่างการประมวลผล BC324 : COBOL Programming CH 6 : DATA DIVISION
เพิ่ม Level 77 , 88 DATA DIVISION. WORKING-STORAGE SECTION. | -A- | - B -------------------------------------- เพิ่ม Level 77 , 88 DATA DIVISION. WORKING-STORAGE SECTION. 77 Num1 PIC 999 VALUE ZEROS. 77 VatRate PIC V99 VALUE .18. 01 StudentName PIC X(10) VALUE SPACES. Num1 VatRate StudentName 000 .18 DATA BC324 : COBOL Programming CH 6 : DATA DIVISION
LEVEL Numbers (Working-storage section) 01 : ใช้สำหรับอธิบาย Record (บอกชื่อ Record) ซึ่ง เป็น Level สูงสุด 02-49 : ใช้สำหรับอธิบาย field ย่อยๆของ Record 77 : ใช้สำหรับอธิบาย field ที่ไม่มีโครงสร้างลำดับชั้น หรือไม่มี ความสัมพันธ์กับ field อื่นใดเลย (ไม่มี field ย่อยเป็นองค์ประกอบ และไม่เป็นองค์ประกอบของ field อื่นใด 88 : ใช้กำหนดเงื่อนไขต่าง ๆ ให้กับ field ใน Level Number ก่อนหน้า 88 condition-name {VALUE IS / VALUE ARE} literal-1 [ {THROUGH / THRU } literal-2 ] BC324 : COBOL Programming CH 6 : DATA DIVISION
ตัวอย่าง Working-Storage Section | - A - | --------- B --------------------------------------------- DATA DIVISION. WORKING-STORAGE SECTION. 77 GROSS-PAY PIC 999V99. 01 TOTAL. 05 SALARY PIC 9(04)V99. 05 OVERTIME PIC 9(03)V99. Level No. 77 จะอยู่ก่อนหน้า 01 BC324 : COBOL Programming CH 6 : DATA DIVISION
LEVEL Numbers 88 Level Number 88 : ใช้กำหนดเงื่อนไขต่าง ๆ ให้กับ field ใน Level Number ก่อนหน้า 88 condition-name {VALUE IS / VALUE ARE} literal-1 [ {THROUGH / THRU } literal-2 ] | - A - | --------- B --------------------------------------------- DATA DIVISION. WORKING-STORAGE SECTION. 01 SCORE PIC 999. 88 PASS VALUE 50 THRU 100. 88 FAIL VALUE 0 THRU 49. BC324 : COBOL Programming CH 6 : DATA DIVISION
LEVEL Numbers 88 Level Number 88 : ใช้กำหนดเงื่อนไขต่าง ๆ ให้กับ field ใน Level Number ก่อนหน้า 88 condition-name {VALUE IS / VALUE ARE} literal-1 [ {THROUGH / THRU } literal-2 ] | - A - | --------- B --------------------------------------------- DATA DIVISION. WORKING-STORAGE SECTION. 01 GRADE PIC A. 88 PASS VALUE ‘A’ THRU ‘D’. 88 FAIL VALUE ‘F’. BC324 : COBOL Programming CH 6 : DATA DIVISION
LEVEL Numbers 88 | - A - | --------- B --------------------------------------------- IDENTIFICATION DIVISION. PROGRAM-ID. WEEK3. DATA DIVISION. WORKING-STORAGE SECTION. 01 SCORE PIC 999. 88 PASS VALUE 50 THRU 100. 88 FAIL VALUE 0 THRU 49. PROCEDURE DIVISION. MOVE 60 TO SCORE. IF PASS DISPLAY ‘You are pass’ ELSE DISPLAY ‘You are fail’. STOP RUN. BC324 : COBOL Programming CH 6 : DATA DIVISION
StudentDetails WORKING-STORAGE SECTION. 01 StudentDetails. 02 StudentName PIC X(10). 02 StudentId PIC 9(7). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Gender PIC X. StudentDetails H E N N E S S Y R M 9 2 3 0 1 6 5 L M 5 1 0 5 5 0 F StudentName StudentId CourseCode Grant Gender
WORKING-STORAGE SECTION. 01 StudentDetails. 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 StudentId PIC 9(7). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Gender PIC X. StudentDetails H E N N E S S Y R M 9 2 3 0 1 6 5 L M 5 1 0 5 5 0 F StudentName StudentId CourseCode Grant Gender Surname Initials
SUMMARY
SELECT STUDENT-FILE ASSIGN TO ‘STUDENT.DAT’. * DATA DIVISION. | - A - | --------- B ------------------------------------------------------- SELECT STUDENT-FILE ASSIGN TO ‘STUDENT.DAT’. * DATA DIVISION. FILE SECTION. FD STUDENT-FILE LABEL RECORD IS STANDARD DATA RECORD IS STUDENT-REC. 01 STUDENT-REC. 05 SID PIC X(03). 05 SNAME. 10 FIRST-NAME PIC X(5). 10 LAST-NAME PIC X(10). WORKING-STORAGE SECTION. 77 SALARY PIC 9(04)V99. 01 TOTAL. 05 TUITION-FEE PIC 9(04)V99. 05 EXPENSE PIC 9(03)V99. BC324 : COBOL Programming CH 6 : DATA DIVISION
EXERCISE
ให้เขียน DATA DIVISION ของโปรแกรมที่มี File ลักษณะดังนี้ EMPLOYEE-FILE ID-NO (4) (1) NAME1 SALARY (7) (16) FIRST (10) LAST A125 b Mr. A... B....... 15000^00 bb...... A336 Ms. B... M....... 20000^00 C007 Mr. S... N....... 30000^00 . Record ของ EMPLOYEE-FILE ชื่อ EMPLOYEE-REC มีตัวแปรอิสระที่ไม่อยู่ใน File คือ EMP-COUNT เก็บตัวเลข 0 – 1,000 AMOUNT เก็บตัวเลข 0 – 100,000 (มีทั้งเลข + และ -)