ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ
Η Γλώσσα Προγραμματισμού Cobol
Εισαγωγή στην Cobol
Τα αρχικά της Cobol σημαίνουν COmmon Business Oriented Language, δηλ. γλώσσα προγραμματισμού προσανατολισμένη σε εμπορικές εφαρμογές. Η Cobol αναπτύχθηκε στα τέλη της δεκαετίας του 1950 και στις αρχές της δεκαετίας του 1960 και είναι η δεύτερη πιο παλιά γλώσσα προγραμματισμού υψηλού επιπέδου, όπου πρώτη ήταν η Fortran. Η Cobol είναι ιδιαίτερα δημοφιλής για εμπορικές εφαρμογές οι οποίες εκτελούνται κατά προτίμηση σε μεγάλους υπολογιστές.
Τα προγράμματα που γράφονται σε κώδικα Cobol είναι πολύ μεγαλύτερα σε πλήθος εντολών από τα ίδια προγράμματα που γράφονται σ’ άλλες γλώσσες προγραμματισμού για να κάνουν την ίδια δουλειά. Αυτό μπορεί να μας φανεί ενοχλητικό αν αποφασίσουμε να προγραμματίσουμε σε Cobol, αλλά η αναλυτική περιγραφή των ενεργειών της γλώσσας και οι μεγάλες δυνατότητές της κάνουν καλύτερη την κατανόηση των προγραμμάτων που γράφουμε σ’ αυτήν.
Αν και αντιμετωπίζεται αρνητικά από πολλούς προγραμματιστές σαν πεπαλαιωμένη, η Cobol παραμένει ακόμα η πιο ευρέως χρησιμοποιούμενη γλώσσα προγραμματισμού στον κόσμο και αυτό γιατί έχουν δημιουργηθεί μ’ αυτήν τόσες πολλές εμπορικές εφαρμογές που είναι πλέον ασύμφορο για τις εταιρείες να αλλάξουν γλώσσα προγραμματισμού.
Διδάσκεται ακόμη και σε πολλά πανεπιστήμια. Περιέχει πολλά από τα χαρακτηριστικά και τις δομές που απαιτούνται από μια μοντέρνα γλώσσα προγραμματισμού και έχει εισέλθει πρόσφατα και στο αντικειμενοστραφές (object-oriented) περιβάλλον. Το σημαντικότερο πλεονέκτημά της είναι ότι διαθέτει πολύ προχωρημένες δυνατότητες για προγραμματισμό σε εμπορικές εφαρμογές (business applications) καθώς και ότι διαχειρίζεται τα λεγόμενα index αρχεία, πράγματα που δεν υπάρχουν στις άλλες γλώσσες προγραμματισμού.
Η Ιστορία της Cobol
Το 1959, το υπουργείο Άμυνας των ΗΠΑ δημιούργησε μια ομάδα με την ονομασία Short-range Committee, η οποία μέσα σε λίγους μήνες δημιούργησε τη γλώσσα προγραμματισμού Cobol. Ο πρώτος μεταγλωττιστής (compiler) της Cobol υλοποιήθηκε το 1960. Η επιτροπή αυτή θέλησε να δημιουργήσει μια γλώσσα που να έχει δυνατή υποστήριξη στα αρχεία, όπως υποστήριξη για σειριακά (sequential), key-indexed και αρχεία άμεσης πρόσβασης (direct access).
Θέλησαν να είναι η γλώσσα ευανάγνωστη (readable) ακόμη και από τους διευθυντές των προγραμματιστών, οι οποίοι θα μπορούσαν να διαβάζουν ένα πρόγραμμα γραμμένο σε Cobol σαν να διάβαζαν ένα κανονικό κείμενο στα αγγλικά. Όπως όλες οι γλώσσες προγραμματισμού υψηλού επιπέδου (high level programming languages), η Cobol είχε μεγάλη απόσταση από τη γλώσσα μηχανής (machine language) και την assembler, οι οποίες ήταν και οι μόνες που χρησιμοποιόντουσαν εκείνη την εποχή (1959).
Η Cobol ήταν και παραμένει πολύ κοντά στην ανθρώπινη φυσική γλώσσα. Ήταν μόλις η δεύτερη γλώσσα προγραμματισμού υψηλού επιπέδου, μετά την Fortran, που έγινε και παρέμεινε δημοφιλής. Σ’ αντίθεση με την Fortran, η Cobol προοριζόταν να γίνει κατανοητή από προγραμματιστές εμπορικών εφαρμογών αλλά ακόμη και από τους managers τους. Είναι πιθανώς η μοναδική γλώσσα προγραμματισμού που μπορούμε να την διαβάσουμε δυνατά και να γίνει κατανοητή. Ένα άλλο μεγάλο πλεονέκτημά της είναι ότι εισήγαγε τον διαχωρισμό της περιγραφής των δεδομένων από τις διαδικαστικές εντολές.
Ξεκινώντας με την Cobol
Ο καλύτερος τρόπος για να μάθουμε να προγραμματίζουμε σε μια καινούργια γλώσσα είναι να μπορούμε να γράφουμε τον κώδικα και να τον εκτελούμε αμέσως σ’ έναν υπολογιστή. Συνεπώς, θα χρειασθούμε έναν υπολογιστή, έναν κειμενογράφο (text editor, όπως το Notepad ή το WordPad) για να γράψουμε τον κώδικά μας και, το σημαντικότερο, έναν compiler της Cobol για τον έλεγχο του πηγαίου κώδικά (source code) μας και τη μετατροπή του σε γλώσσα μηχανής (object code – αντικείμενος κώδικας), ώστε να μπορέσει να τον καταλάβει και να τον εκτελέσει ο υπολογιστής.
Στην Cobol, οι πρώτες έξι θέσεις κάθε γραμμής κώδικα αγνοούνται από τον compiler και χρησιμοποιούνται συνήθως από τον προγραμματιστή για την αρίθμηση των σελίδων και των γραμμών. Αυτοί οι αριθμοί δεν είναι ίδιοι μ’ εκείνους που γνωρίζουμε από την Basic όπου ο αριθμός γραμμής χρησιμοποιείται σαν μέρος της λογικής του προγράμματος, όπως για παράδειγμα η εντολή goto 30, που στέλνει τον έλεγχο του προγράμματος στη γραμμή 30. Η έβδομη θέση είναι γνωστή ως η περιοχή συνέχισης (continuation area) και εκεί μπορούμε να γράψουμε μόνο μερικούς συγκεκριμένους χαρακτήρες, που είναι οι εξής : *, / και – .
Το αστεράκι (*) χρησιμοποιείται για να μπορούμε να εισάγουμε ένα σχόλιο (comment), ώστε ό,τι ακολουθεί να αγνοηθεί από τον μεταγλωττιστή (compiler). Το σύμβολο / (slash) χρησιμοποιείται για να δείξει μια αλλαγή σελίδας (page break) αλλά μπορεί επίσης να χρησιμοποιηθεί και σαν σχόλιο εφόσον το υπόλοιπο κείμενο της γραμμής αγνοείται από τον compiler.
Το σύμβολο – (hyphen) χρησιμοποιείται ως ένα σημάδι συνέχισης του τρέχοντος κειμένου από την προηγούμενη γραμμή και όχι για να συνεχίσουμε μια εντολή στην επόμενη γραμμή. Μπορούμε να συνεχίσουμε μια εντολή της Cobol σ’ όσες γραμμές χρειασθεί αρκεί να βρισκόμαστε στη σωστή περιοχή κωδικοποίησης (στήλες 12-72) και να μην διαχωρίζουμε τα κείμενά μας (strings).
Ακολουθεί ένα παράδειγμα των ανωτέρω, όπου τα έξι πρώτα ψηφία δεν γράφονται κατά τη δημιουργία του προγράμματος και απλά υπάρχουν εδώ για να μας δείξουν τη θέση (στήλη) απ’ όπου πρέπει να ξεκινήσουμε να γράφουμε τον κώδικα του προγράμματος. Πιο συγκεκριμένα, τα τρία πρώτα ψηφία (εδώ 001) δείχνουν τον αριθμό της σελίδας στο έντυπο μηχανογράφησης που χρησιμοποιείτο παλαιότερα, ενώ τα τρία επόμενα ψηφία δείχνουν τον αριθμό της γραμμής. Τα ψηφία αυτά αγνοούνται από τον μεταγλωττιστή (compiler) της Cobol και χρησιμοποιούνται μόνο για τη δική μας οργάνωση.
001001*Αυτό είναι ένα σχόλιο (comment).
001002/Μια νέα σελίδα στην εκτύπωση και ένα σχόλιο (comment).
001003 :
001004 DISPLAY 'Αυτό είναι ένα πολύ μεγάλο κείμενο που’
001005– 'πρέπει να συνεχισθεί στην επόμενη γραμμή'
Οι θέσεις 8 έως 11 και 12 έως 72 αποκαλούνται περιοχές Α και Β αντίστοιχα. Στην περιοχή Α (θέσεις 8-11) γράφουμε τα ονόματα των DIVISIONS, των SECTIONS, των PARAGRAPHS, το FD του FILE SECTION και το επίπεδο 01. Στην περιοχή Β (θέσεις 12-72) μπορούμε να γράψουμε όλες τις εντολές του προγράμματός μας. Οι στήλες 73-80 χρησιμοποιούνται μόνο από τον προγραμματιστή και αγνοούνται από τον compiler.
Συνοψίζοντας, επαναλαμβάνουμε ότι σ’ ένα πρόγραμμα της Cobol ο compiler μεταφράζει μόνο τις στήλες 7-72 και αγνοεί τις υπόλοιπες.
Η Σύνταξη της Cobol
Τα ονόματα των μεταβλητών της Cobol πρέπει να ακολουθούν τους εξής κανόνες :
Να περιέχουν μόνο αλφαβητικούς και αριθμητικούς χαρακτήρες ή/και το σύμβολο – (hyphen).
Να περιέχουν έναν τουλάχιστον αλφαβητικό χαρακτήρα.
Να περιέχουν έως και 30 χαρακτήρες σε πλήθος.
Το σύμβολο – (hyphen), αν χρησιμοποιηθεί, δεν θα πρέπει να εμφανίζεται στην αρχή ή στο τέλος του ονόματος.
Ακολουθούν μερικά παραδείγματα έγκυρων ονομάτων :
B100
Florina
RecordCount-1
Total-2-out
Ο μεταγλωττιστής (compiler) δεν ξεχωρίζει τα κεφαλαία από τα πεζά γράμματα στα ονόματα των μεταβλητών και η Cobol διαθέτει μια μεγάλη γκάμα από δεσμευμένες λέξεις (reserved words) που δεν μπορούν να χρησιμοποιηθούν σαν ονόματα μεταβλητών. Η τελεία (.) είναι το σημαντικότερο σύμβολο στίξης της Cobol και θα την δούμε αναλυτικά αργότερα. Εδώ, σε πρώτη φάση αρκεί να γνωρίζουμε ότι η κάθε γραμμή των IDENTIFICATION DIVISION, ENVIRONMENT DIVISION και DATA DIVISION πρέπει να τελειώνει με μια τελεία.
Τα εισαγωγικά, είτε απλά είτε διπλά, χρησιμοποιούνται για να περιβάλλουμε ένα κείμενο, αρκεί φυσικά να μην τα μπερδεύουμε μεταξύ τους :
" Αυτό είναι λάθος ’
" και αυτό είναι σωστό "
Το κόμμα (,) χρησιμοποιείται για να διαχωρίσουμε ονόματα μεταβλητών, όπως για παράδειγμα :
Για τη διευκόλυνση των προγραμματιστών, υπάρχουν διαθέσιμες πολλές συντομεύσεις και εναλλακτικές ορθογραφίες, όπως για παράδειγμα :
που σημαίνουν όλα το ίδιο πράγμα και επίσης το LINE με το LINES, το PICTURE με το PIC και τέλος το THROUGH με το THRU.
Το Πρόγραμμα Hello World
Το πρόγραμμα Hello World έχει καθιερωθεί σαν το πρώτο απαραίτητο (εισαγωγικό) σ’ όλα τα μαθήματα για γλώσσες προγραμματισμού.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD-PROG.
AUTHOR. PETER.
* Το τυπικό πρόγραμμα Hello World
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TEXT-OUT PIC X(12) VALUE 'Hello World!'.
PROCEDURE DIVISION.
MAIN-PARAGRAPH.
DISPLAY TEXT-OUT
STOP RUN.
Δηλώνουμε το όνομα του προγράμματος (HELLO-WORLD-PROG), τον συγγραφέα (PETER), βάζουμε ένα σχόλιο και δηλώνουμε μία μόνο μεταβλητή, την TEXT-OUT, στην οποία δίνουμε αρχική τιμή κατά τη δήλωσή της ίση με 'Hello World!'. Η μεταβλητή αυτή είναι αλφαριθμητική, PIC X(12), με 12 θέσεις. Στο κυρίως πρόγραμμα τώρα, έχουμε μία μόνο παράγραφο η οποία εμφανίζει το περιεχόμενο της μεταβλητής με την εντολή DISPLAY και τελειώνει το πρόγραμμα με την εντολή STOP RUN.
Η Δομή ενός Προγράμματος της Cobol
Ένα πρόγραμμα γραμμένο σε Cobol αποτελείται από τέσσερις υποδιαιρέσεις (DIVISIONS), όπου η κάθε υποδιαίρεση αποτελείται από τμήματα (SECTIONS), το κάθε τμήμα από παραγράφους (PARAGRAPHS) και η κάθε παράγραφος από προτάσεις (SENTENCES). Η κάθε πρόταση είναι ένας συνδυασμός από λέξεις (words), σταθερές (literals) και σύμβολα (symbols).
Οι τέσσερις υποδιαιρέσεις (DIVISIONS) ενός προγράμματος της Cobol είναι οι εξής :
IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION
Οι λέξεις (words) της Cobol αποτελούνται από τις δεσμευμένες λέξεις (reserved words) που χρησιμοποιεί η Cobol, δηλ. τα ονόματα των εντολών της, και τα ονόματα που δίνουμε εμείς στις μεταβλητές που θα ορίσουμε καθώς και στα πεδία των αρχείων και στις παραγράφους του κυρίως προγράμματος.
Πρέπει να έχουμε υπόψη μας τους εξής κανόνες για τα ονόματα των λέξεων που ορίζουμε εμείς, που τους είδαμε και νωρίτερα :
Πρέπει να χρησιμοποιούμε τα 26 γράμματα του λατινικού αλφαβήτου (Α-Ζ), τα 10 αριθμητικά ψηφία (0-9) και το σύμβολο –.
Δεν μπορούν να αρχίζουν ή να τελειώνουν με το σύμβολο –.
Δεν μπορούν να έχουν κενά διαστήματα ενδιάμεσα.
Δεν μπορούν να περιέχουν μόνο αριθμητικά ψηφία.
Δεν μπορούν να είναι ίδια με τις δεσμευμένες λέξεις της Cobol.
Δεν μπορούν να περιέχουν περισσότερους από 30 χαρακτήρες.
Το Identification Division
Το identification division είναι η πρώτη υποδιαίρεση ενός προγράμματος της Cobol που πρέπει να γράψουμε και ο σκοπός της είναι να ενημερώνει τον υπολογιστή για το όνομα του προγράμματος καθώς και για άλλα στοιχεία, όπως ποιος είναι ο συγγραφέας (author) του προγράμματος, πότε γράφτηκε, πότε μεταγλωττίσθηκε κ.ά.
Στην ουσία, το μόνο απαραίτητο στοιχείο (παράγραφος) απ’ όλα τα παραπάνω για να μπορέσει να γίνει η μεταγλώττιση του προγράμματος είναι το όνομα του προγράμματος, το οποίο πρέπει να περιέχει έως 8 αλφαριθμητικούς χαρακτήρες, με τον πρώτο οπωσδήποτε γράμμα. Το DIVISION αυτό δεν περιέχει SECTIONS, αλλά επτά παραγράφους, όπου η κάθε παράγραφος πρέπει να ξεκινάει από τη στήλη 8 και να τελειώνει με τελεία. Ακολουθεί ένα χαρακτηριστικό παράδειγμα.
INDENTIFICATION DIVISION.
PROGRAM-ID. PROG-1.
AUTHOR. PETER.
INSTALLATION. FLORINA GROUP.
DATE-WRITTEN. 22/1/2005.
DATE-COMPILED.
SECURITY. LOCAL GROUP.
REMARKS. LEARN HOW TO PROGRAM IN COBOL.
Το Enviroment Division
Αυτό το division ενημερώνει τον υπολογιστή με τι θα αλληλεπιδράσει το πρόγραμμα, δηλ. ποιο θα είναι το περιβάλλον του, όπως οι εκτυπωτές (printers), οι δισκέτες (disk drives), άλλα αρχεία κλπ. Δίνει πληροφορίες για το σύστημα του υπολογιστή όπου θα γραφεί και θα εκτελεσθεί το πρόγραμμα καθώς και για το είδος, τον τρόπο οργάνωσης και τα ονόματα των αρχείων που θα χρησιμοποιηθούν και συσχετίζει (αντιστοιχεί) τα λογικά με τα φυσικά ονόματα των αρχείων.
Εδώ έχουμε δύο πολύ σημαντικά τμήματα (sections), το CONFIGURATION SECTION, το οποίο προσδιορίζει τον source (πηγαίο) και τον object (αντικείμενο) υπολογιστή, και το INPUT-OUTPUT SECTION, το οποίο προσδιορίζει τους εκτυπωτές και τα αρχεία που σκοπεύουμε να χρησιμοποιήσουμε και επίσης εκχωρεί ονόματα (αναγνωριστικά) σ’ αυτά.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM PC.
OBJECT-COMPUTER. IBM PC.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE ASSIGN TO 'input.dat'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PRINT-FILE ASSIGN TO PRINTER.
Οι παράγραφοι SOURCE-COMPUTER και OBJECT-COMPUTER του CONFIGURATION SECTION, όπου δίνουμε τα ονόματα των υπολογιστών στα οποία θα γίνει η μεταγλώττιση και η εκτέλεση του προγράμματος αντίστοιχα, είναι μεν υποχρεωτικές να γραφούν αλλά δεν γίνεται κανένας ουσιαστικός έλεγχος των ονομάτων αυτών. Η παράγραφος SPECIAL-NAMES έχει πολλές χρήσεις, όπου εδώ ορίζουμε ότι για το δεκαδικό σημείο (υποδιαστολή) θα χρησιμοποιηθεί το σύμβολο κόμμα (,), όπως ισχύει δηλαδή στην Ελλάδα.
Στο FILE-CONTROL του INPUT-OUTPUT SECTION ορίσαμε την ύπαρξη ενός αρχείου με λογικό όνομα INPUT-FILE, όπως δηλαδή θα το χρησιμοποιήσουμε μέσα στο πρόγραμμα και με φυσικό όνομα input.dat, όπως δηλαδή θα υπάρχει στον σκληρό δίσκο του υπολογιστή. Από ένα άλλο πρόγραμμα της Cobol θα μπορούμε να αναφερθούμε στο ίδιο αρχείο με διαφορετικό ή και με το ίδιο λογικό όνομα αλλά αναγκαστικά με το ίδιο φυσικό όνομα. Το αρχείο με λογικό όνομα PRINT-FILE αναφέρεται στον εκτυπωτή όπου θα στείλουμε για εκτύπωση τα αποτελέσματα που θέλουμε.
Το Data Division
Το data division είναι αυτό στο οποίο γίνεται η εκχώρηση της μνήμης στα δεδομένα (data) και τα αναγνωριστικά (identifiers) που πρόκειται να χρησιμοποιήσει το πρόγραμμα. Περιέχει τρία SECTIONS και καμία παράγραφο. Ο σκοπός του είναι να περιγράψει αναλυτικά την εσωτερική δομή των αρχείων (field description) και να δηλώσει τις μεταβλητές που θα χρησιμοποιήσουμε στο πρόγραμμα.
Δύο πολύ σημαντικά τμήματα (sections) αυτού του division είναι το FILE SECTION και το WORKING-STORAGE SECTION. Το πρώτο χρησιμοποιείται για να ορίσουμε τη δομή, το μέγεθος και το είδος (τύπο) των δεδομένων (πεδίων) που πρόκειται να διαβάσουμε από ή να γράψουμε σ’ ένα αρχείο. Το δεύτερο τμήμα χρησιμοποιείται για να δηλώσουμε τις δικές μας μεταβλητές του προγράμματος, με πιθανή απόδοση αρχικών τιμών. Το τρίτο τμήμα του DIVISION αυτού είναι το CONSTANT SECTION, το οποίο, όμως, χρησιμοποιείται ελάχιστα.
Ακολουθεί ένα χαρακτηριστικό παράδειγμα.
DATA DIVISION.
FILE SECTION.
FD FILE-YPALLILOS LABEL RECORD OMITTED.
DATA RECORD IS REC-YPALLILOS.
01 REC-YPALLILOS.
03 YPAL-AR-MHTROOY.
05 YPAL-KOD-YPHRESIAS PIC X(2).
05 YPAL-KOD-TMIMATOS PIC X(2).
05 YPAL-KODIKOS PIC 9(6).
03 YPAL-EPONYMO PIC Α(20).
03 YPAL-ONΟMA PIC Α(15).
WORKING-STORAGE SECTION.
01 TITLOS.
03 FILLER PIC X(80) VALUE SPACES.
03 FILLER PIC X(6) VALUE "ΣΕΛΙΔΑ".
03 AR-SELIDAS PIC ZZ9.
01 FLAG PIC 9 VALUE 0.
Η εικόνα ενός πεδίου ή μιας μεταβλητής, που δηλώνεται με το PIC, περιγράφει το είδος του, και πιο συγκεκριμένα το Α(10) δηλώνει πεδίο μόνο με αλφαβητικούς χαρακτήρες (Α-Ζ) και με μέγιστο μήκος 10, το Χ(15) δηλώνει αλφαριθμητικούς χαρακτήρες (Α-Ζ, 0-9 και σύμβολα) με μέγιστο μήκος 15 χαρακτήρες και το 9(6) δηλώνει μόνο αριθμούς, εδώ το πολύ 6 ψηφία.
Το Ζ χρησιμοποιείται στα αριθμητικά πεδία για να μην εμφανίζονται τα μη σημαντικά μηδενικά των αριθμών. Το FILLER αποτελεί δεσμευμένη λέξη της Cobol και χρησιμοποιείται για να περιγράψει ένα σταθερό κείμενο (μήνυμα) που δεν πρόκειται να μεταβληθεί και δεν έχει νόημα έτσι η χρησιμοποίηση μιας μεταβλητής και η απόδοση τιμής σ’ αυτήν.
Το Procedure Division
Το procedure division είναι εκεί όπου βρίσκεται ουσιαστικά όλη η λογική του προγράμματος, όπως το διάβασμα από αρχεία, το γράψιμο σε αρχεία, η επεξεργασία των δεδομένων, η επιλογή στη λήψη αποφάσεων, η εκτέλεση βρόχων κ.ά.
Στην Cobol ένα πρόγραμμα αποτελείται από αυτόνομες μονάδες που αποκαλούνται παράγραφοι (paragraphs). Μια παράγραφος μπορεί να περιέχει μία μόνο ή και πολλές εντολές. Τα ονόματα που δίνουμε στις παραγράφους πρέπει να είναι δηλωτικά της δουλειάς που θέλουμε να κάνουν και θα πρέπει να τα γράφουμε ξεκινώντας από τη στήλη 8. Τις εντολές μέσα σε κάθε παράγραφο θα πρέπει να τις γράφουμε ξεκινώντας από τη στήλη 12.
Ακολουθεί ένα χαρακτηριστικό παράδειγμα.
PROCEDURE DIVISION.
CONTROL-PARAGRAPH.
PERFORM READ-DATA-FILE.
PERFORM CALCULATE-PRICES.
PERFORM PRINT-PRICE-REPORT.
…
STOP RUN.
Το ρεπερτόριο των εντολών της Cobol είναι πλουσιότατο και εδώ θα δούμε τις σημαντικότερες εντολές της.
Εντολές για Διάβασμα και Γράψιμο σε Αρχεία
Με την εντολή OPEN μπορούμε να ανοίξουμε ένα σειριακό αρχείο ή μόνο για διάβασμα απ’ αυτό (INPUT) ή μόνο για γράψιμο σ’ αυτό (OUTPUT).
OPEN INPUT ARXEIO-EISODOU.
OPEN OUTPUT ARXEIO-EXODOU.
Με την εντολή READ διαβάζουμε μια ολόκληρη εγγραφή (record) από ένα αρχείο εισόδου. Όταν φθάσουμε στο τέλος του αρχείου (AT END), μπορούμε να ορίσουμε να τοποθετηθεί μια τιμή σε μια βοηθητική μεταβλητή.
READ ARXEIO-EISODOU AT END MOVE 1 TO FLAG-END.
Με την εντολή WRITE γράφουμε μια ολόκληρη εγγραφή (record) σ’ ένα αρχείο εξόδου. Εδώ δεν προσδιορίζουμε το όνομα του αρχείου αλλά το όνομα της εγγραφής του. Η ίδια εντολή χρησιμοποιείται και για την εκτύπωση σε εκτυπωτή.
WRITE REC-ARXEIO-EXODOU.
Με την εντολή CLOSE κλείνουμε όσα από τα ανοικτά αρχεία θέλουμε και τα αποδεσμεύουμε έτσι από το λειτουργικό σύστημα.
CLOSE ARXEIO-EISODOU ARXEIO-EXODOU.
Εντολές για Διάβασμα και Εμφάνιση Τιμών
Με την εντολή ACCEPT μπορούμε να διαβάσουμε δεδομένα (τιμές) από το πληκτρολόγιο και να τα καταχωρήσουμε σε μεταβλητές που θα πρέπει να τις έχουμε δηλώσει προηγουμένως στο WORKING-STORAGE SECTION. Μπορούμε να δηλώσουμε και σε ποιες συντεταγμένες (γραμμή, στήλη) της οθόνης θέλουμε να γίνει η καταχώρηση.
ACCEPT YPAL-EPONYMO AT 0203
Με την εντολή DISPLAY μπορούμε να εμφανίσουμε δεδομένα (τιμές) στην οθόνη. Μπορούμε να δηλώσουμε και σε ποιες συντεταγμένες (γραμμή, στήλη) της οθόνης θέλουμε να γίνει η εμφάνιση της τιμής.
DISPLAY YPAL-ONOMA AT 0805
Εντολές για Καταχώρηση και για Αριθμητικές Πράξεις
Με την εντολή MOVE μπορούμε να κάνουμε καταχώρηση μιας τιμής σ’ ένα πεδίο ή σε μια μεταβλητή.
MOVE POSO TO WS-POSO.
MOVE 1 TO FLAG.
MOVE SPACES TO EPONYMO.
MOVE ZERO TO FLAG.
MOVE TIMH TO ARIT-A, ARIT-B.
Με την εντολή ADD μπορούμε να κάνουμε πρόσθεση δύο ή και περισσοτέρων αριθμητικών τιμών και να καταχωρήσουμε το αποτέλεσμα είτε σ’ έναν από τους προσθετέους είτε σε μια τρίτη μεταβλητή.
ADD A TO B.
Αθροίζει τα Α και Β και καταχωρεί το αποτέλεσμα στο Β.
ADD A, B TO C.
Αθροίζει τα Α και Β και προσθέτει το αποτέλεσμα στο C.
ADD A TO B, C.
Αθροίζει την τιμή του Α σε καθεμία από τις μεταβλητές B και C.
ADD A, B GIVING C.
Αθροίζει τα Α και Β και καταχωρεί το αποτέλεσμα στο C.
Με την εντολή SUBTRACT μπορούμε να κάνουμε αφαίρεση δύο αριθμητικών τιμών και να καταχωρήσουμε το αποτέλεσμα είτε σ’ έναν από τους δύο αριθμούς είτε σε μια τρίτη μεταβλητή.
SUBTRACT A FROM B.
Κάνει την πράξη B=B–A.
SUBTRACT A, B FROM C.
Κάνει την πράξη C=C–B–A.
SUBTRACT A FROM B GIVING C.
Κάνει την πράξη C=B–A.
Με την εντολή MULTIPLY μπορούμε να κάνουμε πολλαπλασιασμό δύο αριθμητικών τιμών και να καταχωρήσουμε το αποτέλεσμα είτε σ’ έναν από τους δύο αριθμούς είτε σε μια τρίτη μεταβλητή.
MULTIPLY A BY B.
Κάνει την πράξη B=B*A.
MULTIPLY A BY A.
Κάνει την πράξη A=A*A.
MULTIPLY A BY B GIVING C.
Κάνει την πράξη C=A*B.
Με την εντολή DIVIDE μπορούμε να κάνουμε διαίρεση δύο αριθμητικών τιμών και να καταχωρήσουμε το αποτέλεσμα είτε σ’ έναν από τους δύο αριθμούς είτε σε μια τρίτη μεταβλητή.
DIVIDE A INTO B.
Κάνει την πράξη B=B/A.
DIVIDE A INTO B GIVING C.
Κάνει την πράξη C=B/A.
DIVIDE SYNOLO BY 12 GIVING MO.
Κάνει την πράξη MO=SYNOLO / 12.
Με την εντολή COMPUTE μπορούμε να κάνουμε πολύπλοκες αριθμητικές πράξεις που θα ήταν δύσκολο να γίνουν με τους συνδυασμούς των εντολών ADD, SUBTRACT, MULTIPLY ΚΑΙ DIVIDE. Πρέπει να έχουμε υπόψη μας ότι η Cobol χρησιμοποιεί το σύμβολο / για τη διαίρεση και τα δύο ** για την ύψωση σε δύναμη.
Για παράδειγμα, για να υπολογίσουμε την μία από τις δύο λύσεις μιας εξίσωσης δευτέρου βαθμού, θα μπορούσαμε να γράψουμε το εξής :
COMPUTE R1=(–B+(B**2–4*A*C)**0.5) / (2*A)
Η Εντολή PERFORM
Η εντολή PERFORM είναι η πιο ενδιαφέρουσα εντολή της Cobol με πολλές δυνατότητες και με πολλές παραλλαγές. Μας θυμίζει κάτι από τις διαδικασίες (procedures) και τις εντολές επανάληψης (for, while, do … until) που γνωρίζουμε από τις άλλες γλώσσες προγραμματισμού. Ακολουθούν μερικά χαρακτηριστικά παραδείγματα.
PERFORM YPOLOGISMOS-FOROU.
Θα εκτελεσθούν όλες οι εντολές της παραγράφου YPOLOGISMOS-FOROU μία φορά και μετά η εκτέλεση θα συνεχισθεί με την εντολή που ακολουθεί την εντολή PERFORM. Το τέλος μιας παραγράφου καθορίζεται από την έναρξη μιας άλλης παραγράφου, όταν δηλαδή βρεθεί μια καταχώριση στη στήλη 8.
PERFORM READ-POSO UNTIL POSO=0.
Θα εκτελεσθούν όλες οι εντολές της παραγράφου READ-POSO όσες φορές χρειασθεί μέχρις ότου η μεταβλητή POSO πάρει την τιμή 0.
PERFORM PARAGRAPH-1 THRU PARAGRAPH-3.
Θα εκτελεσθούν από μία φορά όλες οι εντολές που βρίσκονται ανάμεσα στις παραγράφους PARAGRAPH-1 και PARAGRAPH-3.
PERFORM PARAGRAPH-1 THRU PARAGRAPH-2 5 TIMES.
Θα εκτελεσθούν από 5 φορές όλες οι εντολές που βρίσκονται ανάμεσα στις παραγράφους PARAGRAPH-1 και PARAGRAPH-2.
PERFORM PARAGR-1 THRU PARAGR-2 UNTIL POSO=0.
Θα εκτελεσθούν όλες οι εντολές που βρίσκονται ανάμεσα στις παραγράφους PARAGR-1 και PARAGR-2 όσες φορές χρειασθεί μέχρις ότου η μεταβλητή POSO πάρει την τιμή 0.
PERFORM PARAGR-1 THRU PARAGR-2 VARYING A FROM 1 BY 1 UNTIL A>10.
Θα εκτελεσθούν όλες οι εντολές που βρίσκονται ανάμεσα στις παραγράφους PARAGR-1 και PARAGR-2 τόσες φορές όσο η τιμή της μεταβλητής Α είναι μικρότερη ή ίση από 10. Η μεταβλητή Α ξεκινάει με αρχική τιμή 1 και αυξάνεται σε κάθε επανάληψη κατά 1.
Η Εντολή IF … ELSE
Η εντολή IF είναι κι αυτή πολύ βασική στην Cobol και έχει πολλές παραλλαγές. Οι εντολές IF και ELSE τελειώνουν όταν συναντήσουν τον χαρακτήρα της τελείας (.). Πολύ χρήσιμη είναι η έκφραση NEXT SENTENCE, που κατευθύνει τον έλεγχο του προγράμματος στην επόμενη εντολή.
Οι τελεστές σύγκρισης που χρησιμοποιεί η Cobol είναι οι γνωστοί μας <, > και =, αλλά μπορούμε να χρησιμοποιήσουμε και τις εκφράσεις LESS THAN, GREATER THAN και EQUAL TO αντίστοιχα. Για την άρνηση χρησιμοποιούμε τη δεσμευμένη λέξη NOT.
Ακολουθούν μερικά χαρακτηριστικά παραδείγματα.
IF POSO GREATER THAN 100
MOVE 1 TO FLAG
ADD POSO TO SYNOLO.
IF POSO > 100
MOVE 1 TO FLAG
ELSE
ADD 1 TO METRITIS.
IF METRITIS > 10
ADD 1 TO SYNOLO-SELIDON
MOVE ZEROS TO METRITIS
ELSE
NEXT SENTENCE.
IF METRITIS NOT > 10
NEXT SENTENCE
ELSE
ADD 1 TO SYNOLO-SELIDON
MOVE ZEROS TO METRITIS.
IF POSO > 10
IF POSO > 100
MOVE 1 TO FLAG
ELSE
MOVE 2 TO FLAG
ELSE
MOVE 0 TO FLAG.
IF POSO IS NUMERIC …
Ελέγχει αν το περιεχόμενο της μεταβλητής POSO είναι καθαρά αριθμητικό.
IF ONOMA IS ALHABETIC …
Ελέγχει αν το περιεχόμενο της μεταβλητής ONOMA είναι καθαρά αλφαβητικό.
IF POSO IS NOT POSITIVE
PERFORM ERROR-POSO
ELSE
NEXT SENTENCE.
Ελέγχει αν το περιεχόμενο της μεταβλητής POSO δεν είναι θετικό, δηλαδή αν είναι αρνητικό ή μηδέν.
Χρήσιμες Υποδείξεις για τα Προγράμματα της Cobol
Τα ονόματα που δίνουμε στα αρχεία πρέπει να είναι δηλωτικά του περιεχομένου τους. Για παράδειγμα, για ένα αρχείο υπαλλήλων, μπορούμε να δώσουμε το όνομα FILE-YPALLILOI ή FILE-EMPLOYEES. Αποτελεί καλή τακτική να χρησιμοποιούμε στα ονόματα των αρχείων το πρόθεμα FILE. Ανάλογο πρέπει να είναι και το όνομα που δίνουμε στην εγγραφή (record) ενός αρχείου, όπως για παράδειγμα REC-YPALLILOS. Επίσης, αποτελεί καλή τακτική να χρησιμοποιούμε στα ονόματα των εγγραφών το πρόθεμα REC.
Είναι καλό τα ονόματα των πεδίων μιας εγγραφής να έχουν σαν πρόθεμα τα πρώτα γράμματα του αντίστοιχου αρχείου, όπως για παράδειγμα, YPAL-AR-MHTROOY, YPAL-EPONYMO, YPAL-ONOMA κοκ. Οι αριθμοί επιπέδου που χρησιμοποιούμε πρέπει να ξεκινάνε από το 01 και να αυξάνουν κατά 2, έτσι ώστε να μπορούμε να κάνουμε εύκολα, αν χρειασθεί, κάποια ομαδοποίηση και προσθήκη αργότερα. Ακολουθεί ένα χαρακτηριστικό παράδειγμα.
01 REC-YPALLILOS.
03 YPAL-AR-MHTROOY.
05 YPAL-KOD-YPHRESIAS PIC X(2).
05 YPAL-KOD-TMIMATOS PIC X(2).
05 YPAL-KODIKOS PIC 9(6).
03 YPAL-EPONYMO PIC X(20).
03 YPAL-ONΟMA PIC X(15).
Αν δώσουμε την τιμή A1 στο υποπεδίο YPAL-KOD-YPHRESIAS, την τιμή Β5 στο υποπεδίο YPAL-KOD-TMIMATOS και την τιμή 121342 στο υποπεδίο YPAL-KODIKOS, τότε το ομαδικό πεδίο YPAL-AR-MHTROOY θα πάρει αυτόματα την τιμή A1Β5121342. Αντίστοιχα, αν δώσουμε την τιμή Α2Β5235647 στο ομαδικό πεδίο YPAL-AR-MHTROOY, τότε η τιμή αυτή θα σπάσει και θα μοιρασθεί ανάλογα στα τρία υποπεδία του, YPAL-KOD-YPHRESIAS, YPAL-KOD-TMIMATOS και YPAL-KODIKOS.
Τα λογικά δεδομένα (boolean data) μπορούν να πάρουν μία από δύο τιμές, TRUE ή FALSE. Ακολουθεί ένα παράδειγμα.
IDENTIFICATION DIVISION.
PROGRAM-ID. NUMBER-SIZE-PROG.
AUTHOR. PETER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMBER-SIZE PIC X.
88 BIG-NUMBER VALUE 'Y'.
77 DATA-NUMBER PIC 9(6).
PROCEDURE DIVISION.
INPUT-NUMBER-PARAGRAPH.
MOVE 'N' TO NUMBER-SIZE
ACCEPT DATA-NUMBER
IF DATA-NUMBER > 1000
THEN MOVE 'Y' TO NUMBER-SIZE
END-IF
IF BIG-NUMBER THEN
DISPLAY 'Μεγάλος αριθμός'
ELSE
DISPLAY 'Μικρός αριθμός'
END-IF
STOP RUN.
Αν ο αριθμός που καταχωρούμε με την εντολή ACCEPT είναι μεγαλύτερος από 1000, τότε καταχωρείται ο χαρακτήρας 'Y' στο στοιχείο (item) NUMBER-SIZE. Το αποτέλεσμα αυτής της καταχώρησης είναι να πάρει το στοιχείο BIG-NUMBER του επιπέδου 88 την τιμή TRUE. Το επίπεδο 88 χρησιμοποιείται γι’ αυτόν τον σκοπό στην Cobol, ενώ με το επίπεδο 77 δηλώνουμε μεταβλητές που είναι ανεξάρτητες και δεν έχουν σχέση με ομαδικά πεδία και υποπεδία.
Το BIG-NUMBER έχει αρχική τιμή ίση με ‘Ν’ (false), καθώς καταχωρήσαμε τον χαρακτήρα 'N' στο NUMBER-SIZE, αν και οποιοσδήποτε άλλος χαρακτήρας (εκτός από τον 'Y') θα επέφερε το ίδιο αποτέλεσμα. Η εντολή IF BIG-NUMBER THEN ... είναι σαν να είχαμε γράψει "IF BIG-NUMBER is true THEN ...". Στο επίπεδο 88 μπορούμε να έχουμε και περισσότερες από μία επιλογές που να είναι true.
Ακολουθούν μερικά χαρακτηριστικά παραδείγματα.
01 THIRTY-DAY-MONTHS PIC X VALUE SPACE.
88 SEPTEMBER VALUE 'S'.
88 APRIL VALUE 'A'.
88 JUNE VALUE 'J'.
88 NOVEMBER VALUE 'N'.
Στο παραπάνω παράδειγμα, αν το πεδίο THIRTY-DAY-MONTHS πάρει την τιμή S, τότε το υποπεδίο SEPTEMBER θα γίνει TRUE (αληθές), ενώ αν το πεδίο THIRTY-DAY-MONTHS πάρει την τιμή A, τότε το υποπεδίο APRIL θα γίνει TRUE (αληθές) κοκ.
01 MONTHS-CHECK PIC X.
88 SHORT-MONTH VALUE 'S' 'A' 'J' 'N' 'F'.
Στο παραπάνω παράδειγμα, αν το πεδίο MONTHS-CHECK πάρει μια από τις τιμές S, A, J, N και F, τότε το υποπεδίο SHORT-MONTH θα γίνει TRUE (αληθές), αλλιώς θα γίνει FALSE (ψευδές).
01 GRADES-CHECK PIC 999.
88 A-GRADE VALUE 70 THRU 100.
88 B-GRADE VALUE 60 THRU 69.
88 C-GRADE VALUE 50 THRU 59.
88 FAIL-GRADE VALUE 0 THRU 49.
Στο παραπάνω παράδειγμα, αν το πεδίο GRADES-CHECK πάρει τιμή από 70 έως και 100, τότε το υποπεδίο A-GRADE θα γίνει TRUE (αληθές), ενώ αν το πεδίο GRADES-CHECK πάρει τιμή από 60 έως και 69, τότε το υποπεδίο B-GRADE θα γίνει TRUE (αληθές) κοκ.
Η Εντολή SET
Μια χρήσιμη εντολή είναι η SET. Έτσι, αντί να γράψουμε :
όπως κάναμε στο προηγούμενο παράδειγμα, μπορούμε να δώσουμε τιμή απευθείας στη λογική μεταβλητή BIG-NUMBER, ως εξής :
Φυσικά, θα μπορούσαμε να είχαμε γράψει και το εξής :
Κατά τη διάρκεια της εκτέλεσης ενός προγράμματος, είναι συχνά απαραίτητο να δώσουμε μια αρχική τιμή σ’ ένα στοιχείο ή σε μια ομάδα στοιχείων, όπως την τιμή μηδέν (zero) ή κάποια άλλη τιμή. Συχνά τα προγράμματα δίνουν μια συγκεκριμένη τιμή στα δεδομένα κατά το ξεκίνημά τους. Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε τη μεταβλητή REC-COUNT για να μετρήσουμε τον αριθμό (πλήθος) των εγγραφών (records) που έχουν διαβασθεί από το πρόγραμμα. Προς τον σκοπό αυτό μπορούμε να χρησιμοποιήσουμε την εντολή COMPUTE :
Φυσικά, την πρώτη φορά που θα συναντήσουμε τη μεταβλητή REC-COUNT, αυτή θα πρέπει να έχει μια αρχική τιμή, προφανώς μηδέν. Αυτό μπορεί να γίνει στο data division, ως εξής :
01 REC-COUNT PIC 9(4) VALUE ZERO.
Μπορούμε ακόμη και να χρησιμοποιήσουμε την παρακάτω εντολή ανάμεσα στις πρώτες εντολές στο procedure division :
Αν, όμως, θελήσουμε να μηδενίσουμε μια ομάδα από αριθμητικά στοιχεία ή και να καταχωρήσουμε μηδενικά σε μια ομάδα από αλφαριθμητικά στοιχεία, τότε μπορούμε να χρησιμοποιήσουμε την εντολή INITIALIZE, όπως φαίνεται στο παρακάτω παράδειγμα :
DATA DIVISION.
WORKING-STORAGE SECTION
01 DATA-GROUP.
03 REC-COUNTER PIC 9(4).
03 REC-TYPE PIC X(2).
03 REC-DATE PIC 9(6).
03 FILLER PIC X(14) VALUE 'Στοιχεία εγγραφής'.
Και στο procedure division :
INITIALIZE DATA-GROUP
Το αποτέλεσμα της παραπάνω εντολής INITIALIZE είναι ότι το REC-COUNTER θα έχει τώρα τιμή μηδέν (zero), όπως και το REC-DATE, ενώ το REC-TYPE θα περιέχει κενά (spaces). Το στοιχείο FILLER αποτελεί μια δεσμευμένη λέξη (reserved word) της Cobol και αναφέρεται σε μια συγκεκριμένη (σταθερή) τιμή, η οποία δεν θα μηδενισθεί από την παραπάνω εντολή INITIALIZE.
Μια Εφαρμογή με Εκτύπωση Δεδομένων
Θα δούμε τώρα πώς μπορούμε να δημιουργήσουμε μια φόρμα για εκτύπωση στο data division. Αν θέλουμε να κάνουμε εγγραφή σε αρχείο και όχι εκτύπωση σε εκτυπωτή, η διαδικασία είναι ολόιδια.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
…
SELECT PRINT-FILE ASSIGN TO PRINTER.
DATA DIVISION.
FILE SECTION.
FD PRINT-FILE.
01 REPORT-OUT PIC X(80).
…
WORKING-STORAGE SECTION.
…
01 PRINT-HEADERS.
03 P-TITLE.
05 P-TITLE-TXT PIC X(49) VALUE ' Batch Control Program - Error Report. Page : '.
05 P-PAGE-NO PIC Z9 VALUE ZERO.
03 COL-HEAD-1 PIC X(31)
VALUE ' PART CUST/ DATE QUANT'.
03 COL-HEAD-2 PIC X(24) VALUE ' NO SUP NO SUP/REC'.
01 PRINT-LINE.
03 P-PART-NO PIC X(8).
03 PIC X VALUE SPACE.
03 P-CUS-SUP-NO PIC X(6).
03 PIC XX VALUE SPACES.
03 P-DATE-S-D.
05 P-DATE-1 PIC XX.
05 PIC X VALUE '/'.
05 P-DATE-2 PIC XX.
05 PIC X VALUE '/'.
05 P-DATE-3 PIC XX.
03 PIC X VALUE SPACE.
03 P-QUANT PIC Z(4)9.
01 P-FOOTER.
03 TOT-REC-TXT PIC X(21) VALUE 'Συνολικός αριθμός εγγραφών : '.
03 P-REC-COUNT PIC ZZ9 VALUE ZERO.
01 P-BATCH-REC.
03 BAT-TITLE PIC X(38)
Η εκτύπωση (printout) θα έχει την εξής μορφή (format) :
Ο εκτυπωτής (printer) συσχετίσθηκε με τη μεταβλητή PRINT-FILE (στο επίπεδο FD), όπου το επίπεδο 01 αποκαλείται REPORT-OUT.
Υπάρχουν τέσσερις ομάδες (groups) που χρησιμοποιούνται για να ορίσουν το κάθε τμήμα (κομμάτι) της εκτύπωσης. Η PRINT-HEADERS για τον τίτλο (title) και τις επικεφαλίδες των στηλών (column heads), η PRINT-LINE για τα πραγματικά δεδομένα από τις εγγραφές (records), η P-FOOTER για τα σύνολα (totals) στο τέλος του πίνακα (table) και η P-BATCH που εμφανίζεται μετά τον κύριο πίνακα και εκτυπώνει διάφορα σύνολα.
Για να ορίσουμε τα σταθερά κείμενα, χρησιμοποιούμε fillers με την δεσμευμένη λέξη VALUE, ως εξής :
03 COL-HEAD-1 PIC X(31) VALUE ' PART CUST/ DATE QUANT'.
Η παραπάνω είναι η πρώτη γραμμή των επικεφαλίδων των στηλών (column header) και η COL-HEAD-2 είναι η δεύτερη γραμμή.
Για να υπάρχουν κενά ανάμεσα στους τίτλους, αρκεί να ορίσουμε ένα PIC X με μέγεθος μεγαλύτερο από το κείμενο που περιέχει και έτσι ο χώρος που περισσεύει θα αποτελείται από κενά (spaces).
Για να δημιουργήσουμε κενά (spaces) ανάμεσα στα δεδομένα, χρησιμοποιούμε fillers με την έκφραση VALUE SPACES για το επιθυμητό μέγεθος PIC X.
Τα δεδομένα και τα strings που θέλουμε να εκτυπώσουμε τοποθετούνται στο κατάλληλο στοιχείο της ομάδας εκτύπωσης (print group) και μετά ολόκληρη η ομάδα γράφεται στο REPORT-OUT, το οποίο έχει ορισθεί ως PIC X(80). Για παράδειγμα :
MOVE PAGE-NO TO P-PAGE-NO
WRITE REPORT-OUT FROM P-TITLE AFTER PAGE
Ο αριθμός γραμμής που περιέχεται στη μεταβλητή PAGE-NO εκχωρείται στο στοιχείο P-PAGE-NO της ομάδας P-TITLE, η οποία με τη σειρά της ανήκει στο τμήμα PRINT-HEADERS.
Η δεύτερη εντολή κάνει στην ουσία δύο δουλειές :
Η εντολή AFTER PAGE αναγκάζει τον εκτυπωτή να ξεκινήσει μια καινούργια σελίδα.
Αν αλλάξουμε την εντολή ASSIGN PRINT-FILE TO 'PRINTER' με την εντολή ASSIGN PRINT-FILE TO 'report.txt', τότε θα δημιουργηθεί η ίδια μορφή εκτύπωσης (report) αλλά αυτή τη φορά θα καταχωρηθεί σ’ ένα αρχείο με όνομα 'report.txt' και θα πρέπει να προσθέσουμε και την εντολή ORGANIZATION IS LINE SEQUENTIAL.
Μια Ακόμη Εφαρμογή σε Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST.
AUTHOR. KOSTAS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ORES PIC 99.
01 AMOIBH PIC 9(6).
01 SUM PIC 9(12).
01 FOROS PIC 9(5).
01 K PIC X.
01 GRAMMH.
02 E-FOROS PIC Z(5).
02 FILLER PIC XX VALUE SPACES.
02 E-SUM PIC Z(12).
PROCEDURE DIVISION.
MOVE ZEROS TO E-SUM E-FOROS SUM FOROS.
DISPLAY "ΔΩΣΕ ΤΙΣ ΩΡΕΣ ΕΡΓΑΣΙΑΣ : " AT 0101.
ACCEPT ORES AT 0130.
DISPLAY "ΔΩΣΕ ΤΗΝ ΑΜΟΙΒΗ : " AT 0201.
ACCEPT AMOIBH AT 0230.
COMPUTE SUM = ORES * AMOIBH.
IF SUM > 100000
COMPUTE FOROS = (12 * SUM) / 100
ELSE
COMPUTE FOROS = (8 * SUM) / 100.
MOVE SUM TO E-SUM.
MOVE FOROS TO E-FOROS.
DISPLAY GRAMMH AT 0505.
DISPLAY "AAAA" AT 0605.
ACCEPT K AT 1220.
STOP RUN.
Στο πρόγραμμα αυτό ζητάμε από τον χρήστη να καταχωρήσει δύο αριθμητικές τιμές στις μεταβλητές ORES και AMOIBH και μετά υπολογίζουμε το γινόμενό τους για να το καταχωρήσουμε στη μεταβλητή SUM. Στη συνέχεια υπολογίζουμε τον φόρο με μια κατάλληλη εντολή IF … ELSE και καταχωρούμε τις τιμές των μεταβλητών SUM και FOROS σε ίσου μεγέθους αντίστοιχες μεταβλητές, ώστε να μπορούμε να τις εμφανίσουμε στην οθόνη μέσω του ομαδικού πεδίου GRAMMH.
Η εντολή ACCEPT K AT 1220 δίνεται για να σταματήσει η εκτέλεση του προγράμματος και να μπορούμε να δούμε έτσι τα αποτελέσματα. Με την εντολή STOP RUN τελειώνει η εκτέλεση του προγράμματος.