
บทเรียนนี้จะเป็นรูปแบบการเขียนโปรแกรมภาษา COBOL การแสดงผลข้อมูลจากตัวแปร โดยแบ่งการรับค่าแสดงผลตาม DataType ต่างๆ
จากตัวอย่างบทเรียนก่อนจะเป็นการทำงานเบื้องต้น และการ Compile โปรแกรม
การแสดงผลรับค่าข้อมูลนั้น ภาษา COBOL จะใช้รูปแบบการรับค่าดังนี้ ใต้การประกาศ PROGRAM-ID
1 2 3 4 |
DATA DIVISION. WORKING-STORAGE SECTION. 01 SW-NAME PIC A(30). 01 SW-ID PIC 9(5) VALUE '600368'. |
COBOL มีการประกาศแบบใช้ Picture Clause (PIC) เป็นการ Define ตัวแปรเป็นหลัก โดย PIC จะเป็นเหมือน regularExpression พิเศษที่รู้ว่าอะไรคือ DataType, Length, Sign และ Decimal and Position
โดยรูปแบบการใช้ Data Type นั้นจะเห็นว่า PIC A(30) คืออะไร ซึ่งจริงๆ A มาจากคำว่า Alphabetic หรือตัวอักษรที่มีความยาว 30 ตัวเก็บในตัวแปรชื่อ SW-NAME ส่วน ตัวแปร SW-ID นั้นคือการเก็บค่าตัวเลข 600368 ซึ่งน่าจะเป็นรหัสไว้ในรูปแบบ PIC 9(5) ใน Syntax ของ COBOL นั้น 9 ไม่ใช่ตัวเลขครับแต่เป็น Numeric หรือเลขจำนวนเต็ม
รูปแบบตามตารางปรากฏดังนี้
Symbol | Description |
---|---|
9 | Numeric เลขจำนวนเต็ม |
A | Alphabetic ตัวอักษร |
X | Alphanumeric อักขระอักษรเลข อักขระที่รวมทั้งตัวอักษรภาษาอังกฤษ A-Z ตัวเลข 0-9 |
V | Implicit Decimal จุดทศนิยมคั่นภายใน |
S | Sign เครื่องหมายต่างๆ เช่น +,- และอาจจะเป็น . |
P | Assumed Decimal เลขทศนิยม |
ดังนั้นพิจารณาส่วนของ Code นี้
1 2 3 4 |
DATA DIVISION. WORKING-STORAGE SECTION. 01 SW-NAME PIC A(30). 01 SW-ID PIC 9(5) VALUE '600368'. |
เราจะเห็นว่า SW-NAME อาจจะเป็น String อะไรก็ได้ที่มีความยาว 30 ตัวอักษร และ SW-ID คือ ตัวเลขจำนวนเต็มจำนวน 5 ตัว (ในตัวอย่างใส่ไป 6 หลัก) ทีนี้ให้เราแสดงผล ค่าต่างๆ เมื่อเปิดโปรแกรม
1 2 3 4 5 |
PROCEDURE DIVISION. A000-FIRST-PARA. MOVE 'Banyapon Poolsawas' TO SW-NAME. DISPLAY "My Name : "SW-NAME. DISPLAY "My Identity : "SW-ID. |
ส่วนการแสดงผลนั้นเริ่มที่ สร้าง String ชือผมขึ้นมา Banyapon Poolsawas ไปเก็บไว้นตัวแปล SW-NAME
1 2 |
A000-FIRST-PARA. MOVE 'Banyapon Poolsawas' TO SW-NAME. |
ส่วน SW-ID นั้นมีการประกาศแต่แรกแล้วใน DATA DIVISION ดังนั้นค่าตัวแปรจะตามมาประมวลผลได้ทันทีในส่วนของ PROCEDURE DIVISION มาลอง Compile กันดู
Code ตัวเต็มๆคือเราต้องประกาศ 3 ส่วน ได้แก่ IDENTIFICATION DIVISION เพื่อบอกว่าโปรแกรมของเราคือโปรแกรมอะไร
1 2 |
IDENTIFICATION DIVISION. PROGRAM-ID. TUTORIAL2. |
ตั้งชื่อว่า TUTORIAL2
หลังจากนั้นก็ส่วนของ DATA DIVISION และ PROCEDURE DIVISION พร้อม STOP RUN ตัวชุดคำสั่ง จะได้ไฟล์ตามนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
IDENTIFICATION DIVISION. PROGRAM-ID. TUTORIAL2. DATA DIVISION. WORKING-STORAGE SECTION. 01 SW-NAME PIC A(30). 01 SW-ID PIC 9(5) VALUE '600368'. PROCEDURE DIVISION. A000-FIRST-PARA. DISPLAY 'DAYDEV CO.,LTD.'. MOVE 'Banyapon Poolsawas' TO SW-NAME. DISPLAY "My Name : "SW-NAME. DISPLAY "My Identity : "SW-ID. STOP RUN. |
เปิด Terminal มา Compile ตัวโปรแกรม COBOL ของเรา
1 |
cobc -x tutorial2.cob |
จะได้ไฟล์มาแล้ว เปิดเลย
จะเห็นว่าการทำงานของมัน ถูกต้อง โดยเฉพาะส่วนของ SW-ID ที่ปรากฏมาแค่ 5 หลักทั้งที่ข้อมูลมี 6 หลัก
เราสามารถทดสอบรูปแบบการแสดงผลของ PIC บน DataType ต่างๆ ได้เพิ่มเติม ลองสร้าง ไฟล์ .cob มาใหม่ตั้งชื่อว่า tutorial3.cob แล้วใช้รูปแบบการประกาศ PIC แบบนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
IDENTIFICATION DIVISION. PROGRAM-ID. TUTORIAL3. DATA DIVISION. WORKING-STORAGE SECTION. 01 SW-NUM1 PIC S9(3)V9(2). 01 SW-NUM2 PIC PPP999. 01 SW-NUM3 PIC S9(3)V9(2) VALUE -123.45. 01 SW-NUM4 PIC S9(3)V9(3) VALUE +123.456. 01 SW-NAME PIC A(6) VALUE 'DAYDEV'. 01 SW-ID PIC X(5) VALUE '$125M'. PROCEDURE DIVISION. DISPLAY "SW-NUM1 : "SW-NUM1. DISPLAY "SW-NUM2 : "SW-NUM2. DISPLAY "SW-NUM3 : "SW-NUM3. DISPLAY "SW-NUM4 : "SW-NUM4. DISPLAY "SW-NAME : "SW-NAME. DISPLAY "SW-ID : "SW-ID. STOP RUN. |
สังเกตหลังจาก Compile ให้ดีครับ
1 |
01 SW-NUM1 PIC S9(3)V9(2). |
ตัวแปร SW-NUM1 จะเป็นค่า S คือเครื่องหมาย +,- ส่วนมากเป็น + จำนวน 3 หลัก คั่นด้วยทศนิยม (v) ที่เป็น เลขจำนวนเต็ม (9) เลยประกาศ V9 โดยมีจำนวน 2 หลัก ประกาศว่า V9(2)
ส่วน SW-NUM3 และ SW-NUM4 จะเป็น S9(3)V9(2) สามารถกำหนดค่าเริ่มต้น S เป็น – ได้เลยใน DATA DIVISION และตามด้วย V9 จำนวนทศนิยมเป็นตัวเลข 2 ตำแหน่ง ส่วน SW-NUM4 นั้น S เป็น + และมีทศนิยท V9(3) เป็นเลขจำนวนเต็ม 3 หลัก
ตัวแปร SW-ID เป็น X(5) คือเป็นอักขระ ตัวอักษร ตัวเลข และ เครื่องหมาย ใดๆ ที่มีความยาว 5 ตัว ก็ใส่ X(5)
ทำการ Compile โปรแกรม
1 |
cobc -x tutorial3.cob |
ผลที่ได้คือ
จะเห็นว่า COBOL นั้นจะต้องใส่ใจเรื่องของการ DEFINE เป็นหลักก่อนจะทำการประมวลผลครับ