COBOL - Altsysteme warten und erweitern - Uwe Rozanski - E-Book

COBOL - Altsysteme warten und erweitern E-Book

Uwe Rozanski

0,0

Beschreibung

COBOL-Programme verstehen, pflegen und erweitern Erläuterung aller wichtigen Sprachelemente sowie umfassende Befehlsreferenz Inklusive Datenbankanbindung in COBOL (IMS und SQL) sowie COBOL auf Host-Systemen Dieses Buch richtet sich an erfahrene Entwickler objektorientierter Sprachen wie C++ oder Java. Es vermittelt die Funktionsweise der Programmiersprache COBOL, um die in zahlreichen Implementierungen auf unterschiedlichen Plattformen immer noch produktiv laufenden COBOL-Programme zu verstehen, zu warten und bei Bedarf mit zusätzlichen Funktionalitäten zu erweitern. Dafür bietet es Ihnen sowohl eine grundlegende Einführung in die Programmierung mit COBOL als auch eine thematisch gegliederte Referenz der Befehle mit praktischen Beispielen. Da reine COBOL-Programme in der Praxis selten zu finden sind, geht ein weiterführendes Kapitel speziell auf die Anbindung an relationale Datenbanken und hierarchische Datenbanksysteme wie IMS ein. Auch COBOL auf Host-Systemen und die Besonderheiten der CICS-Programmierung werden thematisiert. Mit diesem praktischen Handbuch sind Sie in der Lage, COBOL-Programme in Produktivumgebungen selbstständig zu warten und weiterzuentwickeln. Aus dem Inhalt: Grundlegende Sprachelemente Datenfelder, Datenstrukturen und Datensätze Operationen und Kontrollstrukturen Tabellenverarbeitung Interne und externe Unterprogramme Sequenzielle und index-sequenzielle Dateien Datenbankanbindung (SQL, IMS) Host-Systeme und CIS Zum Download: Zwei vollständige Bonuskapitel zu den Themen »Intrinsic-Funktionen« sowie »Konkurrierende Dateizugriffe«

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 377

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Inhaltsverzeichnis
Impressum
Einleitung
Was Sie in diesem Buch erwartet
Kapitel 1: Was unterscheidet COBOL von modernen, objektorientierten Sprachen?
1.1 Die Geschichte‌ von COBOL
1.2 Fest definierter Sprachumfang
1.3 Prozedurale Programmierung
1.4 Linearer Programmablauf
1.5 Datenfelder mit fester Länge
1.6 Module statt Instanzen
Kapitel 2: Programmstruktur und grundlegende Sprachelemente
2.1 COBOL-Programmstruktur‌
2.1.1 Die Bedeutung der Programmteile (DIVISIONs)
2.1.2 Die Hierarchie in einem COBOL-Programm
2.1.3 Das COBOL-Programm im Überblick
2.2 COBOL-Sprachelemente‌
2.2.1 Reservierte Wörter‌‌‌
2.2.2 Programmiererwörter‌
2.2.3 Literale‌
2.2.4 Figurative Konstanten‌
2.2.5 Trennsymbole
2.2.6 Operatoren
2.2.7 Sonderregister‌
2.3 COBOL-Zeichensatz‌
2.4 Interpretation der COBOL-Klausel- und -Anweisungsformate
2.5 Das Codierformat‌
2.5.1 Fixed-form reference format‌
2.5.2 Free-form reference format‌
Kapitel 3: Bedeutung der 4 DIVISIONs
3.1 IDENTIFICATION DIVISION‌
3.2 ENVIRONMENT DIVISION‌
3.2.1 CONFIGURATION SECTION‌
3.2.2 INPUT-OUTPUT SECTION‌
3.2.3 FILE-CONTROL‌
3.2.4 I-O-CONTROL‌
3.3 DATA DIVISION‌
3.3.1 FILE SECTION‌
3.3.2 WORKING-STORAGE SECTION‌
3.3.3 LOCAL-STORAGE SECTION‌
3.3.4 LINKAGE SECTION‌
3.4 PROCEDURE DIVISION‌
3.4.1 USING‌-Zusatz
3.4.2 RAISING‌-Zusatz
3.4.3 DECLARATIVES‌ (Sondervereinbarungen)
3.4.4 END PROGRAM‌
3.4.5 Aufbau der PROCEDURE DIVISION
Kapitel 4: Definitionen von Datenfeldern
4.1 Stufennummer 77‌‌
4.2 PICTURE‌‌-Klausel
4.2.1 Alphabetische Datenfelder‌‌‌
4.2.2 Alphanumerische Datenfelder‌‌‌
4.2.3 Numerische Datenfelder‌‌‌
4.2.4 Boolesche Datenfelder‌‌‌
4.2.5 Alphanumerische druckaufbereitete Datenfelder‌‌‌
4.2.6 Numerische druckaufbereitete Datenfelder‌‌‌
4.3 VALUE‌‌-Klausel
4.4 USAGE‌‌-Klausel
4.4.1 DISPLAY‌
4.4.2 PACKED-DECIMAL‌‌‌ (manchmal auch COMP-3)
4.4.3 COMP‌‌‌ oder BINARY‌‌‌
4.4.4 BINARY-CHAR, BINARY-SHORT, BINARY-LONG und BINARY-DOUBLE
4.4.5 FLOAT-SHORT‌‌‌
4.4.6 FLOAT-LONG‌‌‌
4.4.7 FLOAT-EXTENDED‌‌‌
4.4.8 INDEX‌‌‌
4.4.9 NATIONAL‌‌‌
4.4.10 OBJECT REFERENCE‌‌‌
4.4.11 POINTER‌‌‌
4.4.12 PROGRAM POINTER‌‌‌
4.5 BLANK WHEN ZERO‌‌-Klausel
4.6 JUSTIFIED‌‌
4.7 SYNCHRONIZED‌‌-Klausel
4.8 SIGN‌‌-Klausel
Kapitel 5: Definitionen von Datenstrukturen und Datensätzen
5.1 Stufennummern 01 bis 49‌‌
5.2 REDEFINES‌‌-Klausel
5.3 Stufennummer 88‌‌
5.4 Stufennummer 66‌‌
5.5 Datengruppen mit BIT‌‌-Feldern
5.6 Konstante‌‌
Kapitel 6: Feldzuweisungen im Hauptspeicher
6.1 MOVE‌‌-Anweisung
6.1.1 MOVE CORRESPONDING‌‌-Anweisung
6.2 INITIALIZE‌‌-Anweisung
6.2.1 TO VALUE-Angabe
6.2.2 Ohne den Zusatz REPLACING
6.2.3 Mit dem Zusatz REPLACING
6.2.4 INITIALIZE für Tabellen
6.3 SET‌‌-Anweisung
6.4 Referenz-Modifikation‌
Kapitel 7: Die Anweisungen ACCEPT, DISPLAY und STOP
7.1 DISPLAY‌‌-Anweisung
7.1.1 Erweiterte Eigenschaften der DISPLAY-Anweisung
7.1.2 Löschen des Bildschirms‌
7.1.3 Vorpositionierung des Cursors‌
7.2 ACCEPT‌‌-Anweisung
7.2.1 Gleichzeitige Eingabe in mehrere Felder
7.2.2 Eingabe in numerische Felder‌‌
7.2.3 ACCEPT-Anweisung und CURSOR‌‌-Klausel
7.2.4 ACCEPT-Anweisung und CRT STATUS‌‌-Klausel
7.2.5 Spezielle Dialogtechniken mit DISPLAY und ACCEPT
7.3 ACCEPT-Anweisung Format 2‌‌
7.4 STOP‌‌-Anweisung
Kapitel 8: Arithmetische Operationen
8.1 COMPUTE‌‌-Anweisung
8.1.1 Der ROUNDED‌-Zusatz
8.1.2 Der ON SIZE ERROR‌‌-Zusatz
8.1.3 Der NOT ON SIZE ERROR‌‌-Zusatz
8.1.4 Überlauf‌ bei mehreren Ergebnisfeldern
8.2 ADD‌‌-Anweisung
8.3 SUBTRACT‌‌-Anweisung
8.4 Korrespondierendes‌‌‌‌ Addieren und Subtrahieren
8.5 MULTIPLY‌‌-Anweisung
8.6 DIVIDE‌‌-Anweisung
8.6.1 Rest‌ der Division
Kapitel 9: Programmverzweigungen und interne Unterprogramme
9.1 GO TO‌‌-Anweisung
9.2 GO TO ... DEPENDING ON‌‌
9.3 Vorbemerkung zu internen Unterprogrammen
9.4 PERFORM-Anweisung‌‌‌‌
9.5 EXIT‌‌-Anweisung
9.6 EXIT PERFORM‌‌‌-Anweisung
9.7 EXIT SECTION‌‌‌-Anweisung
Kapitel 10: Die Anweisungen IF und EVALUATE
10.1 IF‌‌-Anweisung
10.1.1 Vorzeichenbedingung‌
10.1.2 Klassenbedingung‌
10.1.3 Bedingungsnamen-Bedingung‌
10.1.4 Abfragen eines Pointers
10.1.5 Zusammengesetzte Bedingungen‌‌
10.2 CONTINUE‌‌-Anweisung
10.3 EVALUATE‌‌-Anweisung
Kapitel 11: Quellcode wiederverwenden mit COPY
11.1 COPY‌-Anweisung
11.2 COPY-Bibliotheken‌
11.2.1 REPLACING‌-Zusatz
11.2.2 SUPPRESS‌-Angabe
11.3 REPLACE‌-Anweisung
Kapitel 12: Externe Unterprogramme‌
12.1 Sprachelemente für Unterprogramm-Technik
12.2 Die Programmverbindung‌
12.3 CALL‌‌-Anweisung
12.4 LINKAGE SECTION‌‌
12.5 USING‌‌-Zusatz der PROCEDURE DIVISION
12.5.1 BY REFERENCE‌‌
12.5.2 BY REFERENCE ADDRESS OF‌‌
12.5.3 BY CONTENT‌‌
12.5.4 BY CONTENT LENGTH OF‌‌
12.5.5 BY VALUE‌‌
12.6 EXIT PROGRAM-Anweisung‌‌
12.7 Rekursive COBOL-Programme‌‌‌
12.8 CANCEL‌‌-Anweisung
12.9 GOBACK‌‌-Anweisung
12.10 Weitere Angaben zur Programmkommunikation
12.11 EXTERNAL‌‌-Klausel
12.12 Schachtelung von Programmen‌‌
12.12.1 Die Schachtelungsebene eines Unterprogramms
12.12.2 Der Aufruf eines geschachtelten Unterprogramms
12.13 GLOBAL‌‌-Klausel
12.14 INITIAL‌‌-Klausel
Kapitel 13: Tabellenverarbeitung
13.1 OCCURS-Klausel‌‌‌
13.1.1 Definition einer eindimensionalen Tabelle‌‌
13.1.2 Adressierung‌‌‌ von Elementen einer Tabelle
13.1.3 Definition einer mehrdimensionalen Tabelle‌‌‌
13.1.4 Adressierung‌‌ von mehrdimensionalen Tabellen
13.2 Normalindizierung‌‌ (Subskribierung‌‌)
13.3 Spezialindizierung‌‌
13.3.1 INDEXED BY‌‌‌-Zusatz
13.3.2 Vorteile der Spezialindizierungsmethode
13.3.3 Die relative Adresse im Spezialindex‌
13.3.4 Relative Spezialindizierung
13.3.5 DEPENDING ON‌‌-Zusatz
13.3.6 SET‌‌-Anweisung
13.3.7 USAGE INDEX‌‌-Klausel
13.4 Vergleich zwischen Normal- und Spezialindizierung
13.5 Initialisieren von Tabellen
13.5.1 VALUE‌‌-Klausel
13.5.2 REDEFINES‌‌-Klausel
13.6 Sequenzielles Durchsuchen einer Tabelle mit der SEARCH‌‌-Anweisung
13.6.1 VARYING‌-Zusatz
13.6.2 AT END‌-Zusatz
13.6.3 WHEN‌-Zusatz
13.6.4 CONTINUE‌
13.6.5 Durchsuchen einer mehrdimensionalen Tabelle
13.7 Binäres Durchsuchen einer Tabelle
13.7.1 ASCENDING/DESCENDING KEY‌‌-Zusatz
13.7.2 Sortieren einer Tabelle mit der SORT‌‌-Anweisung
13.7.3 SEARCH ALL‌‌-Anweisung
Kapitel 14: Verarbeiten von Zeichenketten
14.1 INSPECT‌‌-Anweisung
14.1.1 Zählen mit TALLYING‌‌
14.1.2 BEFORE‌‌ und AFTER‌‌
14.1.3 Ersetzen mit REPLACING‌‌
14.1.4 Konvertieren mit CONVERTING
14.2 STRING‌‌-Anweisung
14.3 UNSTRING‌‌-Anweisung
Kapitel 15: Sequenzielle Dateien
15.1 Eintragungen in der ENVIRONMENT DIVISION‌
15.1.1 SELECT‌‌-Klausel
15.1.2 ASSIGN‌‌‌-Klausel
15.1.3 ORGANIZATION‌‌‌-Klausel
15.1.4 ACCESS MODE‌‌‌-Klausel
15.1.5 FILE STATUS‌‌‌-Klausel
15.1.6 Sonstige Klauseln
15.2 Eintragungen in der DATA DIVISION‌
15.2.1 RECORD CONTAINS‌‌-Klausel
15.2.2 BLOCK CONTAINS‌‌-Klausel
15.2.3 LINAGE‌‌-Klausel
15.2.4 CODE-SET‌‌-Klausel
15.2.5 Datensatzbeschreibung‌
15.3 Anweisungen in der PROCEDURE DIVISION‌
15.3.1 OPEN‌‌-Anweisung
15.3.2 READ‌‌-Anweisung
15.3.3 WRITE‌‌-Anweisung
15.3.4 REWRITE‌‌-Anweisung
15.3.5 CLOSE‌‌-Anweisung
15.3.6 USE‌‌-Anweisung
Kapitel 16: Index-sequenzielle Dateiorganisation‌
16.1 Eintragungen in der ENVIRONMENT DIVISION‌
16.2 Eintragungen in der DATA DIVISION‌
16.3 Anweisungen in der PROCEDURE DIVISION‌
16.3.1 OPEN‌‌-Anweisung
16.3.2 READ‌‌-Anweisung
16.3.3 WRITE‌‌-Anweisung
16.3.4 REWRITE‌‌-Anweisung
16.3.5 DELETE‌‌-Anweisung
16.3.6 START‌‌-Anweisung
16.3.7 CLOSE‌‌-Anweisung
16.3.8 Zulässige E/A-Anweisungen
16.3.9 USE‌‌-Anweisung
16.4 Alternative Schlüssel für Index-sequenzielle Dateien
16.4.1 ALTERNATE RECORD KEY‌‌-Klausel
16.4.2 ALTERNATE KEY in der READ-Anweisung
16.4.3 ALTERNATE KEY in der START-Anweisung
Kapitel 17: SORT-MERGE-Modul
17.1 Die SELECT-Klausel für Sortierdateien‌‌
17.2 Die SD‌-Stufenbezeichnung
17.3 SORT‌‌-Anweisung
17.3.1 ASCENDING‌/DESCENDING‌ KEY
17.3.2 Automatische E/A-Operationen
17.3.3 INPUT PROCEDURE‌‌
17.3.4 OUTPUT PROCEDURE‌‌
17.3.5 COLLATING SEQUENCE‌
17.3.6 WITH DUPLICATES IN ORDER‌
17.3.7 Format 2
17.4 RELEASE‌‌-Anweisung
17.5 RETURN‌‌-Anweisung
17.6 MERGE‌‌‌-Anweisung
Kapitel 18: COBOL und Datenbanken (IMS, SQL)
18.1 Die hierarchische Datenbank IMS‌
18.1.1 Aufbau einer IMS-Datenbank
18.1.2 Beschreibung der Datenbank mittels DBD‌‌
18.1.3 Logische Datenbankstruktur mit PSB‌‌ beschreiben
18.1.4 Definition eines PCB‌ in COBOL
18.1.5 Programmeinsprung mittels ENTRY‌
18.1.6 Notwendige Ein-/Ausgabebereiche
18.1.7 Datenbankzugriff programmieren
18.1.8 Auswerten des Statuscodes
18.1.9 Laden einer IMS-Datenbank
18.2 Arbeiten mit relationalen Datenbanken
18.2.1 Aufbau einer relationalen Datenbank‌
18.2.2 Beschreibung der Datenbank mittels SQL‌
18.2.3 Der SQL Precompiler‌‌‌‌
18.2.4 Erstellen der COBOL-Struktur mittels DCLGEN‌‌
18.2.5 BIND‌ und REBIND‌
18.2.6 Typischer Programmaufbau
18.2.7 Fehlerbehandlung über die SQLCA‌‌
18.2.8 Programmieren von statischen SQL-Anweisungen
18.2.9 Programmieren von dynamischen SQL-Anweisungen
Kapitel 19: COBOL und CICS‌
19.1 CICS-Kommandoformat‌
19.2 COBOL-Einschränkungen
19.3 Erstellung von CICS-Programmen
19.3.1 ‌Strukturierte Programmierung
19.3.2 Conversational Processing‌‌
19.3.3 Pseudoconversational Processing‌‌‌‌
19.3.4 TRANSID‌‌
19.3.5 COMMAREA‌‌
19.3.6 EXECUTION INTERFACE BLOCK‌
19.3.7 RETURN‌‌-Kommando
19.4 Fehlerbehandlung unter CICS‌
19.4.1 Statuscode EIBRESP‌‌ abfragen
19.4.2 HANDLE CONDITION‌‌-Kommando
19.4.3 EXECUTE INTERFACE BLOCK‌‌
19.5 Eigene Unterprogramme‌ aufrufen
19.5.1 Programmkontrolle
19.5.2 LINK‌‌ und XCTRL‌‌
19.5.3 RETURN‌‌
19.5.4 Ausnahmebedingungen für LINK, XCTL und RETURN
19.5.5 Daten über die COMMAREA‌‌ übergeben‌
19.6 IBM-3270-Geräte – Bildschirmsteuerung
19.6.1 Basic Mapping Support‌‌ BMS
19.6.2 Masken senden und empfangen
19.7 Dateiverarbeitung‌
19.7.1 Unterstützte Formate‌
19.7.2 Lesen mit READ‌‌
19.7.3 Schreiben mit WRITE‌‌
19.7.4 REWRITE‌‌, DELETE‌‌ und UNLOCK‌‌
19.7.5 Dateien sequenziell lesen‌
19.7.6 Ausnahmebedingungen

Uwe Rozanski

COBOL

Altsysteme warten und erweitern

Das umfassende Praxis-Handbuch

Impressum

Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN 978-3-7475-0648-6 1. Auflage 2023

www.mitp.de E-Mail: [email protected] Telefon: +49 7953 / 7189 - 079 Telefax: +49 7953 / 7189 - 082

© 2023 mitp Verlags GmbH & Co. KG

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Dieses E-Book verwendet das EPUB-Format und ist optimiert für die Nutzung mit Apple Books auf dem iPad von Apple. Bei der Verwendung von anderen Readern kann es zu Darstellungsproblemen kommen.

Der Verlag räumt Ihnen mit dem Kauf des E-Books das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.

Der Verlag schützt seine E-Books vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die E-Books mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert. Bei Kauf in anderen E-Book-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.

Lektorat: Janina Bahlmann Sprachkorrektorat: Petra Heubach-Erdmann Covergestaltung: Christian Kalkert Bildnachweis: © conorcrowe / stock.adobe.com Satz: III-satz, Kiel, www.drei-satz.deelectronic publication: III-satz, Kiel, www.drei-satz.de

Einleitung

Die Programmiersprache COBOL gibt es seit etwa 1960 und COBOL steht ausgeschrieben für Common Business Oriented Language, also für eine Programmiersprache zur Lösung von kaufmännischen Problemen.

Aufgrund des Alters und der Zielrichtung dieser Sprache ist es nicht verwunderlich, dass es sehr viele Implementierungen auf den unterschiedlichsten Plattformen gibt und diese bis heute noch in Funktion sind.

Auch wenn es heutzutage keine großen Neuentwicklungen mehr geben dürfte, die in COBOL stattfinden, spielt die Wartung der immer noch produktiv laufenden Systeme eine wichtige Rolle. Allerdings gibt es immer weniger geschultes oder gar erfahrenes Personal, das diese Wartung übernehmen könnte. Moderne, oft objektorientierte Programmiersprachen stehen heute im Fokus von Aus- und Weiterbildung und nicht so eine prozedurale Sprache wie COBOL.

Dieses Buch bemüht sich, alle Aspekte von COBOL so zu erklären, dass sie jeder versteht, der zwar programmieren kann, aber noch nicht mit COBOL gearbeitet hat. Die einzelnen Kapitel sind thematisch geordnet. Das erleichtert den Einstieg in diese Programmiersprache, aber vor allem auch die zielgerichtete Suche nach einem Thema, das Sie gerade benötigen.

COBOL ist eine sehr geschwätzige Programmiersprache, meint, der Quellcode ist oft recht umfangreich, dafür aber auch leicht zu lesen. Was in modernen Sprachen oft mit einem Methodenaufruf oder der Verwendung einer Funktion erledigt ist, wird in COBOL durch spezifische Befehle programmiert, die oft über mehrere Zeilen gehen. Programme mit 10.000 Zeilen und mehr sind keine Seltenheit und in COBOL durchaus üblich.

In der Praxis werden Sie aber selten reine COBOL Programme finden, also solche, die komplett mit dem Befehlsumfang dieser Sprache auskommen. Oft sind es Programme, die Datenbanken bearbeiten müssen und für diesen Zweck gibt es keine COBOL-Befehle. Neben relationalen Datenbanken gibt es auch hierarchische Datenbanksysteme wie IMS, die vor allem in älteren Implementierungen vorkommen können. Dem Thema COBOL und Datenbanken ist daher ein eigenes Kapitel gewidmet.

Auch auf Host-Systemen hat man schon sehr frühzeitig begonnen, Anwendungen zu entwickeln, mit denen Benutzer interagieren können, sogenannte Onlineanwendungen mit textbasierten Terminals. CICS spielt hier eine wichtige Rolle, vor allem, weil es auch für die Steuerung von Industriemaschinen verwendet wurde. Will man ein solches Programm warten, muss man verstehen, wie es tickt. Auf die Besonderheiten der CICS-Programmierung unter COBOL geht daher ebenfalls ein eigenes Kapitel ein.

Die klare Zielrichtung dieses Buches ist, es erfahrenen Programmierern zu ermöglichen, auch ältere COBOL-Programme zu pflegen und zu erweitern, auch wenn sie mit Datenbank- oder Onlinesystemen arbeiten.

Was Sie in diesem Buch erwartet

Das vorliegende Buch behandelt alle COBOL-Definitionen und -Befehle, ohne sich auf einen bestimmten Dialekt oder einen spezifischen Hersteller zu beschränken.

Wer eine bestehende COBOL-Anwendung warten muss, hat es mit einem bestimmten COBOL-Compiler‌ und Dialekt zu tun. Es kann nicht garantiert werden, dass der gesamte Umfang dieses Dialekts‌ hier beschrieben ist, oder umgekehrt, dass alles, was hier erklärt wird, auch mit dem verwendeten Dialekt funktioniert. Sie werden aber mit Sicherheit genügend Informationen vorfinden, um die täglichen Herausforderungen zu bewältigen und die vorgefundenen Anweisungen verstehen zu können.

Absichtlich nicht behandelt werden in diesem Buch die objektorientierten Erweiterungen von COBOL. Tatsächlich ist es möglich, vollwertige, objektorientierte Programme in COBOL zu schreiben, inklusive eigener Klassendefinitionen mit Methoden und Attributen. Eigene COBOL-Klassen von bestehenden Klassen abzuleiten und Methoden zu überladen, ist vollständig implementiert. Hier alle Möglichkeiten aufzuzeigen, ist ein eigenes Buch wert und würde an dieser Stelle den Umfang sprengen.

Die objektorientierte Spracherweiterung kam zu spät. Zu dieser Zeit hatten ganz andere Programmiersprachen wie C++ oder Java bereits so viele Anhänger, dass sich kaum jemand für OO-COBOL‌ interessiert hat. Ziel dieses Buches ist es, erfahrene Entwickler in die Lage zu versetzen, bestehende COBOL-Programme zu pflegen und diese dürften kaum objektorientiert sein. Viel wahrscheinlicher ist es, dass es sich um CICS-Programme und/oder um Anwendungen handelt, die mit Datenbanken arbeiten. Daher wurden die bereits erwähnten Kapitel in das Buch mit aufgenommen.

Downloads zum Buch

Unter https://mitp.code-load.de finden Sie zwei umfangreiche Bonuskapitel zu den Themen »Instristic-Funktionen« sowie »Konkurrierende Dateizugriffe« zum kostenlosen Download.

Nutzen Sie folgenden Code, um den Download freizuschalten:

42ea53388f

Kapitel 1: Was unterscheidet COBOL von modernen, objektorientierten Sprachen?

1.1  Die Geschichte‌ von COBOL

An dieser Stelle soll nicht bis ins kleinste Detail beschrieben werden, an welchem Tag welches Feature in die Programmiersprache COBOL aufgenommen wurde, vielmehr soll ein grober Überblick über die Entstehung dieser Sprache und die verschiedenen Standards gegeben werden. In Tabelle 1.1 findet sich eine chronologische, wenn auch oberflächliche Aufstellung der Entstehungsgeschichte.

Tabelle 1.1: Grobe Entstehungsgeschichte

Jahr

Entwicklungsschritt

1960

Unter dem Namen COBOL-60‌ wurde eine erste Version von COBOL von einem Gremium mit den Namen CODASYL‌ verabschiedet. Dieses Gremium bestand aus Vertretern von Regierung, Militär und Privatwirtschaft der USA und hat es sich zur Aufgabe gemacht, eine gemeinsame Programmiersprache zu entwickeln, die auf unterschiedlichen Computersystemen lauffähig sein sollte.

1961

Die Programmiersprache wurde komplett überarbeitet und war nicht abwärtskompatibel. Aus dieser Erfahrung heraus hat man festgelegt, künftig dafür zu sorgen, dass ältere Programme mit neuen Compiler-Versionen noch übersetzt werden können.

In diesem Jahr wurden der COBOL-SORT und REPORT WRITER aufgenommen. Es handelt sich dabei um Module, um Dateien zu sortieren und Auswertungen zu erstellen.

1965

Definition von Tabellen und die Möglichkeit, Dateien zu bearbeiten, haben den Sprachumfang erweitert.

1968

In diesem Jahr wurde der ANSI-Standard‌ X3.23-1968 für COBOL verabschiedet und seither ständig weiterentwickelt.

1974

Einzug der strukturierten Programmierung bestehend aus internen Unterprogrammen

1985

Unter der Bezeichnung COBOL-85‌ wurden beispielsweise die Begrenzer END-IF und END-PERFORM eingeführt. Auch die internen Funktionen wurden zu dieser Zeit definiert.

2002

Die Verarbeitung von Unicode und die objektorientierte Programmierung wurden aufgenommen.

Wichtig zu wissen ist, dass es sich bei COBOL um eine standardisierte Programmiersprache handelt und es unterschiedliche Hersteller von Compilern gibt, die natürlich auch immer eigene Erweiterungen eingebracht haben.

Interessant ist auch, dass es zuletzt eine standardisierte, objektorientierte Version von COBOL gegeben hat, die aber kaum zum Einsatz kam.

1.3  Prozedurale Programmierung

COBOL ist eine prozedurale Programmiersprache, was meint, dass man alle Anweisungen in einer einzigen Prozedur hintereinander schreibt und diese linear abgearbeitet werden.

In einer funktionsorientierten Programmiersprache wie beispielsweise C schreibt man eine Reihe von Funktionen und kombiniert diese geschickt. In objektorientierten Sprachen programmiert man dagegen Klassen, die mithilfe von Methoden die Attribute der Klasseninstanzen manipulieren.

In COBOL definiert man seine Daten in der DATA DIVISION und dort meist in der WORKING-STORAGE SECTION. Alle Datenfelder stehen allen Anweisungen innerhalb der Prozedur zur Verfügung, die in der PROCEDURE DIVISION programmiert werden. Es gibt keine Kapselung der Datenfelder wie beispielsweise die innerhalb einer Funktion oder wie die Attribute einer Instanz. Es ist auch nicht möglich, lokale Variablen innerhalb einer Schleife zu programmieren, deren Sichtbarkeit dann auf die Anweisungen innerhalb dieser Schleife begrenzt wäre.

In COBOL können externe Unterprogramme geschrieben werden, um die Komplexität einer Aufgabe in mehrere kleinere Programme aufzuteilen und um die Wiederverwendbarkeit von Logik zu ermöglichen. Typische COBOL-Programme sind aber dennoch meist mehrere Tausend Zeilen lang und bestehen nicht aus einer Unzahl an Unterprogrammaufrufen.

Die Möglichkeiten, heute in COBOL ebenfalls objektorientiert zu programmieren oder eigene Funktionen zu implementieren, findet man so gut wie gar nicht.

1.4  Linearer Programmablauf

Alle Anweisungen eines COBOL-Programms stehen in der PROCEDURE DIVISION. Das Programm beginnt mit der ersten dort stehenden Anweisung, die eine nach der anderen abgearbeitet werden.

Dieser lineare Programmablauf wird nur durch Befehle wie GO TO oder PERFORM unterbrochen. Während man mit GO TO‌ schlicht zu einer anderen Stelle innerhalb der Prozedur springt, um von dort an wieder linear weiterzulaufen, ruft man mit PERFORM‌ ein internes Unterprogramm auf, an dessen Ende man wieder an die rufende Stelle zurückspringt und es dann mit der Anweisung weitergeht, die auf die PERFORM-Anweisung folgt. In den Genen der Programmiersprache COBOL findet man eine solche Aufteilung in interne Unterprogramme jedoch nicht. Wenn sich der Programmierer nicht um den ordentlichen Ablauf innerhalb seines Programms kümmert, passieren durchaus überraschende Dinge.

Um interne Unterprogramme zu programmieren, benötigt man Sprungmarken‌, bei denen es sich um Sections oder Paragraphen handeln kann. Die Details werden in späteren Kapiteln erklärt. In Listing 1.4 ist ein COBOL-Programm zu sehen, das über drei interne Unterprogramme verfügt, die mithilfe der Anweisung PERFORM auch aufgerufen werden.

WORKING-STORAGE SECTION.01 FELD PIC 99.PROCEDURE DIVISION.STEUER SECTION. MOVE 0 TO FELD. PERFORM UPRO-01. PERFORM UPRO-02.UPRO-01 SECTION. ADD 1 TO FELD.UPRO-02 SECTION. ADD 2 TO FELD.ENDE SECTION. DISPLAY FELD.

Listing 1.4: COBOL-Programm mit internen Unterprogrammen

Was passiert in Listing 1.4 genau? Das Programm beginnt mit der Anweisung MOVE 0 TO FELD, was dieses mit 0 initialisiert. Danach wird das interne Unterprogramm UPRO-01 aufgerufen. Da es sich hier um eine SECTION handelt, endet das interne Unterprogramm mit dem Beginn der nächsten SECTION. Durch den Aufruf PERFORM UPRO-01 wird also lediglich die Anweisung ADD 1 TO FELD ausgeführt, Der Inhalt der Variablen FELD ist jetzt 1. Die Steuerung geht an die nächste Anweisung nach dem PERFORM zurück. Dort steht PERFORM UPRO-02. Einzige Anweisung dieses internen Unterprogramms ist ADD 2 TO FELD. Diese wird ausgeführt und in der Variablen FELD steht jetzt der Wert 3. Die Steuerung geht wieder an die nächste Anweisung nach dem PERFORM zurück und die nächste Anweisung ist tatsächlich ADD 1 TO FELD. Diese wird ausgeführt und in FELD steht jetzt 4. Jetzt kommt auch noch ADD 2 TO FELD dran, womit wir schon bei dem Wert 6 sind. Am Ende wird dann noch DISPLAY FELD ausgeführt, was den Wert 6 auf dem Bildschirm ausgibt oder in die Standardausgabe schreibt. Danach folgt nichts mehr und die Steuerung geht an das Betriebssystem zurück.

Das meint COBOL mit einem linearen Programmablauf.

Um die erneuten Additionen, also den erneuten linearen Ablauf der internen Unterprogramme, zu verhindern, müsste nach dem zweiten PERFORM entweder ein GO TO ENDE stehen oder ein PERFORM ENDE, gefolgt von der Anweisung STOP RUN, die das Programm jetzt beendet und die Steuerung an das Betriebssystem zurückgibt.

1.5  Datenfelder mit fester Länge

Alle Datenfelder‌, mit denen man in einem COBOL-Programm arbeiten will, müssen in der DATA DIVISION definiert werden. Je nach Verwendung findet man diese Felder dort zum Beispiel in der FILE SECTION oder der WORKING-STORAGE SECTION.

Für alle Datenfelder gilt, dass ihr Datentyp und ihre Länge in Byte fest definiert sind. Datenfelder mit variabler Länge, die sich erst zur Laufzeit ergibt, gibt es in COBOL nicht.

Manchmal spricht man in COBOL von einem Feld oder einer Tabelle mit variabler Länge, meint damit aber nicht dasselbe wie ein Entwickler in einer objektorientierten Sprache. Will man beispielsweise in COBOL mit einem Datenbankfeld arbeiten, das vom Typ VARCHAR ist, muss man Folgendes definieren:

01 FELDNAME. 05 FELDLAENGE PIC S9(4) COMP. 05 FELDINHALT PIC X(200).

Zu dem eigentlichen Datenfeld gehört zunächst ein Längenfeld, gefolgt von einem weiteren Feld für den Feldinhalt. Dieses ist aber in dem Beispiel immer 200 Byte lang, egal, welcher Wert in FELDLAENGE steht. Der COBOL-Programmierer muss vielmehr selbst darauf achten, dass er maximal so viele Bytes verarbeitet, wie das Längenfeld angibt. Nicht selten füllt er FELDINHALT vor einem Zugriff mit lauter Leerzeichen, um so die Werte aus einem vorangegangenen Zugriff zu überschreiben.

Auch eine Tabelle mit einer variablen Anzahl an Elementen lässt sich in COBOL zwar definieren, dennoch belegt eine solche Tabelle im Hauptspeicher immer den maximal benötigten Platz.

01 ANZAHL PIC 99.01 TABELLE. 05 ELEMENT OCCURS 1 TO 20 DEPENDING ON ANZAHL. 10 DATENFELD PIC X(20).

Listing 1.5: Tabelle mit variabler Elementanzahl

In Listing 1.5 ist eine solche Tabelle definiert. Sie soll mindestens ein, maximal zwanzig Elemente besitzen, je nachdem, was zur Laufzeit in dem Feld ANZAHL steht. Und tatsächlich kommt es zu einem schweren Fehler, wenn das Programm auf ein ungültiges Element zugreift. Im Hauptspeicher befinden sich aber immer 20 Elemente, die jeweils 20 Byte lang sind.

Dieser Umstand muss bei dem Design einer COBOL-Anwendung bedacht werden, auch wenn heute der zur Verfügung stehende Hauptspeicher viel größer ist als früher.

Es gibt aber nicht nur das Problem, dass die Datenfelder in Summe zu groß sein könnten, manchmal sind sie schlicht auch zu klein. Will man beispielsweise eine XML-Datei lesen, weiß man gar nicht, wie groß die einzelnen Felder für die Aufnahme der Daten definiert werden müssen. Moderne COBOL-Compiler bieten tatsächlich die Möglichkeit, solche Dateien zu lesen, über entsprechende Statusfelder bekommt man dabei die Information, ob es dabei dazu gekommen ist, dass Feldinhalte abgeschnitten werden mussten.

1.6  Module statt Instanzen

Eine komplexe Anwendung besteht aus einer Menge einzelner COBOL-Programme, die sich untereinander aufrufen können. Typischerweise sind sie oft mehrere Hundert oder gar Tausende Zeilen lang. Das hängt einerseits damit zusammen, dass die Programmiersprache COBOL sehr geschwätzig ist, man also viel Quellcode für relativ wenig Funktion schreiben muss, andererseits gibt es aber auch keine wirkliche Motivation, stark zu modularisieren.

Ein COBOL-Programm erledigt typischerweise eine Aufgabe, und diese komplett. Dabei greift es gleichzeitig auf alle Datenfelder zu, die es dafür benötigt.

Objektorientierte Sprachen kapseln zusammengehörige Daten in Klassen in Form von Attributen. Diese Klassen bieten eine Reihe von Methoden, um ihre Attribute zu manipulieren. Benötigt man zur Laufzeit mehrere Daten desselben Typs, erzeugt man die passende Anzahl von Instanzen dieser Klassen.

Eine komplexe objektorientierte Anwendung besteht daher aus einer umfangreichen Menge von Klassen, die sich gegenseitig benutzen und ihre Daten vor anderen schützen.

Benötigt man in COBOL mehrere Daten desselben Typs, definiert man sich eine Tabelle, die groß genug ist. Die eigenen Daten werden an externe Unterprogramme übergeben, die diese manipulieren können. Von einer Kapselung der Daten kann hier nicht die Rede sein.

Um ein COBOL-Programm zu verstehen und um es ändern zu können, muss man seinen Blickwinkel ändern. In COBOL stehen nicht die Daten im Vordergrund, sondern die Befehle der programmierten Prozedur. Ein COBOL-Programmierer fragt sich, welche Daten er in Gänze zur Bewältigung seiner Aufgabe benötigt, und definiert diese dann komplett in seiner DATA DIVISION. Er wird nur dann ein externes Unterprogramm aufrufen, wenn er die dort programmierte Prozedur auch in anderen COBOL-Programmen verwenden will. Für das eigene Programm ist das externe lediglich eine Art verlängerte Werkbank.

Um zu verstehen, was das bedeutet, stellen Sie sich ein Hauptprogramm vor, das in Folge seiner Verarbeitung dasselbe externe Unterprogramm zweimal aufruft. Beim ersten Aufruf befindet es sich noch in seinem initialen Zustand. Die Datenfelder sind leer oder mit Initialwerten gefüllt. Beim zweiten Aufruf stehen in den Feldern jedoch noch genau die Werte, die die Felder am Ende des ersten Aufrufs hatten, außer man gibt das externe Modul nach dem Aufruf explizit wieder frei. Über die LINKAGE SECTION teilen sich beide Module einen Teil der Daten, die sie beide manipulieren können. Es gibt auch keine Instanzen von externen Unterprogrammen.

Kapitel 2: Programmstruktur und grundlegende Sprachelemente

Die meisten Programmiersprachen erlauben die Definition von Variablen, Konstanten und Dateien, aber auch die Codierung von ausführbaren Anweisungen an beliebigen Stellen im Quellprogramm. In COBOL sieht es dagegen anders aus. In diesem Kapitel werden die Struktur und die Elemente eines COBOL-Programms beschrieben, sodass Sie sich in einem bestehenden COBOL-Programm leichter zurechtfinden.

2.1  COBOL-Programmstruktur‌

In der Programmiersprache COBOL hat man für Übersicht im Quellprogramm gesorgt, indem man das Quellprogramm in vier Programmteile, DIVISIONs‌ genannt, untergliedert hat. Jedem Programmteil wurde ein fester Name als Überschrift und ein Verwendungszweck gegeben:

IDENTIFICATION DIVISION.ENVIRONMENT DIVISION.DATA DIVISION.PROCEDURE DIVISION.

Listing 2.1: Die vier Teile eines COBOL-Programms

Diese DIVISIONs müssen in der hier angegebenen Reihenfolge im Programm erscheinen. Manche sind optional und können weggelassen werden.

DIVISIONs unterteilen sich weiter in SECTIONs‌, deren Namen durch die COBOL-Syntax vorgegeben sind, außer in der PROCEDURE DIVISION.

SECTIONs (auch Kapitel‌ genannt) können sich weiter in Paragraphen‌ unterteilen. Auch hier gilt, dass deren Namen vorgeschrieben sind, außer in der PROCEDURE DIVISION.

Die eigentlichen COBOL-Definitionen und Anweisungen schreibt man schließlich in Sätzen‌, wobei diese Bezeichnung wörtlich zu nehmen ist. Sätze enden mit einem Punkt‌ und der spielt in der Syntax‌ von COBOL eine wichtige Rolle. Spätestens in dem Kapitel 9 über Verzweigungen und interne Unterprogramme wird das deutlich.

Sätze bestehen aus Klauseln‌ und Wörtern‌, die teils durch die Syntax vorgegeben und teils frei durch den Programmierer wählbar sind.

2.1.1  Die Bedeutung der Programmteile (DIVISIONs)

Der Erkennungsteil IDENTIFICATION DIVISION‌ enthält eine Reihe von Informationen zur Benennung und Dokumentation des Quellprogramms. Dieser Teil hat wenig Einfluss auf das Programm. Die hier gemachten Angaben werden – für spätere Bezugnahme – Kommentareintragungen‌ genannt. Der Maschinenteil ENVIRONMENT DIVISION‌ beschreibt die für das Programm notwendige Umgebung. Zusätzlich werden Beziehungen zwischen den logischen Dateien, die im Quellprogramm definiert sind, und den tatsächlichen Ein/Ausgabeeinheiten, auf denen sich diese Dateien befinden, hergestellt. Die an dieser Stelle gemachten Angaben werden Klauseln‌ genannt.

Der Datenteil DATA DIVISION‌ dient dazu, die Daten zu beschreiben, die im Programm verarbeitet werden sollen. Das umfasst Dateisatzbeschreibungen, Konstanten und Variablen. Diese Angaben werden Definitionen‌ und Klauseln genannt.

Der Prozedurteil PROCEDURE DIVISION‌ enthält eine Reihe von ausführbaren Anweisungen, die zusammen mit den definierten Daten das Objektprogramm bilden. Die in diesem Teil gemachten Angaben werden Anweisungen‌ genannt.

2.1.2  Die Hierarchie in einem COBOL-Programm

IDENTIFICATION DIVISION |——> Paragraphen |——> KommentareENVIRONMENT DIVISION |——> SECTIONs |——> Paragraphen |——> Sätze |——> Klauseln |——> WörterDATA DIVISION |——> SECTIONs |——> Definitionen |——> Sätze |——> Klauseln |——> WörterPROCEDURE DIVISION |——> SECTIONs |——> Paragraphen |——> Sätze |——> Anweisungen |——> Wörter

Listing 2.2: COBOL-Hierarchie

Alle Namen der SECTIONs‌ und der Paragraphen in den ersten drei DIVISIONs sind von COBOL fest vorgegeben. In der PROCEDURE DIVISION können Sie beliebige Namen verwenden.

2.1.3  Das COBOL-Programm im Überblick

(1) IDENTIFICATION DIVISION. Kommentareintragungen ...(2) ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER‌. Name des Umwandlungssystems OBJECT-COMPUTER‌. Name des ausführenden Systems SPECIAL-NAMES‌. Speziell vom Programmierer festzulegende Namen und Regeln REPOSITORY‌. Namen von objektorientierten Klassen, Funktionen, Interfaces, die in diesem Programm benutzt werden sollen. Diese sind nicht Gegenstand dieses Buches INPUT-OUTPUT SECTION‌. FILE-CONTROL‌. Klauseln zur Definition von Dateien I-0-CONTROL‌. Klauseln zu speziellen Ein/Ausgabetechniken(3) DATA DIVISION. FILE SECTION‌. Definition von Datensätzen WORKING-STORAGE SECTION‌. Definition von Konstanten und Variablen LOCAL-STORAGE SECTION‌. Definition von Variablen, die bei jedem Programmaufruf dynamisch angelegt werden LINKAGE SECTION‌. Felder für den Datenaustausch in einem Unterprogramm REPORT SECTION‌. Für Definitionen für den REPORT-WRITER SCREEN SECTION‌. Definition von Eingabemasken(4) PROCEDURE DIVISION. Anweisungen für die Verarbeitung

Listing 2.3: Aufbau eines COBOL-Programms

Eine detaillierte Beschreibung der einzelnen DIVISIONs und SECTIONs finden Sie in Kapitel 3.

2.3  COBOL-Zeichensatz‌

Es geht in diesem Abschnitt um die Zeichen, die in einem COBOL-Quellprogramm verwendet werden können. Der COBOL-Zeichensatz enthält 81 Codezeichen:

52 Buchstaben (26 Großbuchstaben und 26 Kleinbuchstaben)

10 arabische Ziffern

19 Sonderzeichen

Dies sind die Zeichen, aus denen Klauseln und Anweisungen zusammengesetzt sind. Außerdem können Kleinbuchstaben benutzt werden, was aber nicht zu empfehlen ist. Die restlichen Zeichen können nur in Kommentaren und nicht numerischen Literalen verwendet werden.

Tabelle 2.2: COBOL-Zeichensatz

Zeichenvorrat

Bedeutung

0 bis 9

Ziffern

A bis Z

Großbuchstaben

a bis z

Kleinbuchstaben

Leerzeichen

+

Pluszeichen

-

Minuszeichen (Bindestrich)

*

Stern

/

Schrägstrich

Gleichheitszeichen

$

Währungszeichen (Dollarsymbol)

,

Komma

.

Punkt

;

Semikolon

"

Anführungszeichen

'

Apostroph

(

öffnende runde Klammer

)

schließende runde Klammer

>

größer als

<

kleiner als

&

Verkettungszeichen für Literale

:

Doppelpunkt

_

Unterstrich

2.4  Interpretation der COBOL-Klausel- und -Anweisungsformate

Jede Klausel oder Anweisung wird von COBOL in einem bestimmten Format vorgegeben. Der Programmierer hat diese Formate genauestens zu beachten, das heißt, er darf nichts hinzufügen und kein »Muss-Wort« auslassen.

Abb. 2.1: Beispiel zur COBOL-Syntax

Wie werden nun die einzelnen Elemente eines Formats interpretiert?

Wörter in Großbuchstaben:‌

Dies sind reservierte COBOL-Wörter. Sie dürfen nur in dem Zusammenhang verwendet werden, in dem sie aufgetreten sind, z.B. DIVIDE, ROUNDED und ON.

Wörter in Kleinbuchstaben:‌

Dies sind Programmiererwörter, die vom Programmierer selbst gewählt werden können. Sie dürfen nicht mit einem der reservierten Wörter identisch sein, z.B. KUNDEN-SATZ, EINKOMMEN-STEUER, LAGER-STAMMDATEI usw.

Pflichteintrag:‌

Pflichteinträge müssen codiert werden; sie können COBOL-Schlüsselwörter oder Bezeichner sein, z.B. DIVIDE, INTO usw. Alle in der Syntax unterstrichenen Wörter sind Pflichteinträge.

Wahlfreier Eintrag:‌

Es handelt sich hier um eine zusätzliche Angabe, deren Wirkung manchmal, jedoch nicht immer, bei der Programmierung gewünscht wird. Es können auch Wahlwörter sein, die angegeben oder ausgelassen werden können. Diese dienen lediglich der besseren Lesbarkeit des Programms und haben keinen Einfluss auf die Wirkung der Anweisungen oder Klauseln. Wahlwörter sind z.B. ON, IS und ARE. Alle reservierten COBOL-Wörter, die nicht unterstrichen sind, gehören zu dieser Gruppe.

Alternative:‌

Hier werden mehrere Angaben zur Wahl angeboten: Sie müssen eine dieser Angaben wählen. Alternativen werden durch geschweifte Klammern { } gekennzeichnet.

Wahlfreie Alternative:‌

Bei wahlfreien Alternativen stehen dem Programmierer mehrere Angaben zur Verfügung, von denen eine gewählt werden kann; man kann aber auch alle weglassen. Sie werden in der Syntaxbeschreibung in eckige Klammern [ ] eingeschlossen.

Wiederholungen:‌

Drei aufeinanderfolgende Punkte ... zeigen an, dass der jeweils letzte Term wiederholt angegeben werden darf. In der DIVIDE-Anweisung ist dies der Bezeichner zusammen mit der optionalen ROUNDED-Angabe.

Zwei senkrechte Striche zeigen an, dass mehrere der angegebenen Alternativen verwendet werden dürfen. Für die DIVIDE-Anweisung bedeutet das, dass sowohl die ON SIZE ERROR- als auch die NOT ON SIZE ERROR-Angabe verwendet werden darf. Beide sind jedoch optional.

2.5  Das Codierformat‌

2.5.1  Fixed-form reference format‌

Klassische COBOL-Programme sind in Zeilen zu je maximal 80 Zeichen geschrieben, die in Bereiche unterteilt werden. Verschiedene dieser Bereiche (Spaltenbereiche) haben eine besondere Bedeutung. Dieses Spaltenkonzept kann nach wie vor verwendet werden und sorgt für einen übersichtlichen Quellcode.

0 1 2 3...6 7 8123456789012345678901234567890...012345678901234567890------------------------------------------------------000010 IDENTIFICATION DIVISION. PROG1000000020 PROGRAM-ID. PROG1000. PROG1000000030* PROG1000...000160 PROCEDURE DIVISION. PROG1000000170 STEUER SECTION. PROG1000000180 ST01. PROG1000000190* Programmstart PROG1000000200 MOVE SPACE TO A. PROG1000

Listing 2.18: Typisches COBOL-Listing

Jede Zeile wird wie folgt eingeteilt:

Zeilennummerierung‌ (Spalte 1 bis 6‌)

Dieser Bereich enthält eine fortlaufende Zahl zur Nummerierung der Programmzeilen oder Leerzeichen.

A-Bereich‌ (Spalte 8 bis 11‌)

Im A-Bereich müssen die nachfolgenden COBOL-Elemente begonnen werden:

Teilüberschriften‌ (DIVISIONs)

Kapitelüberschriften‌ (SECTIONs)

Paragraphennamen‌

Stufenbezeichnungen‌FD, SD

Stufennummern‌ 01 und 77

Die Stufennummern 66 und 88 können im A-Bereich beginnen.

B-Bereich‌ (Spalte 12 bis 72‌)

Im B-Bereich müssen die nachfolgenden COBOL-Elemente begonnen werden:

Klauseln‌

Datennamen‌

Stufennummern 02 bis 49

Anweisungen‌

Die Stufennummern 66 und 88 können im B-Bereich beginnen.

Programmtextbereich‌ (Spalten 8 bis 72‌)

Moderne Compiler unterscheiden nicht mehr zwischen A-Bereich und B-Bereich, sondern haben diese in dem sogenannten Programmtextbereich zusammengefasst. Aus Gründen der besseren Lesbarkeit wurde aber auch später noch in vielen Programmen die ehemals vorgeschriebene Einrückung beibehalten.

Fortsetzungsbereich‌ (Spalte 7‌)

In diesem Bereich kann eines der nachfolgenden Zeichen für den jeweils angegebenen Verwendungszweck eingetragen werden:

*

In jede Zeile, die in Spalte 7 das Stern-Zeichen enthält, kann ein Kommentar‌ geschrieben werden. Solche Zeilen werden bei der Übersetzung des COBOL-Programms nicht übersetzt.

/

Der Schrägstrich in Spalte 7 hat den gleichen Verwendungszweck wie der Stern; der Schrägstrich bewirkt hier jedoch zusätzlich einen Seitenvorschub im Quellprogrammprotokoll, also, wenn der Quellcode ausgedruckt wird.

D

Das Zeichen D in Spalte 7 kennzeichnet eine Testhilfezeile‌. Eine solche Zeile enthält Testhilfe-Anweisungen, die nur dann übersetzt werden, wenn die Klausel WITH DEBUGGING MODE‌ im SOURCE-COMPUTER-Eintrag angegeben wird.

Der Bindestrich in Spalte 7 zeigt eine Fortsetzungszeile‌ an. Er wird notwendig, wenn ein COBOL-Element in zwei Zeilen getrennt werden muss. Unter einem COBOL-Element verstehen wir hier ein COBOL-Wort oder ein Literal. In diesem Fall wird der erste Teil des COBOL-Elements bis einschließlich Spalte 72 geschrieben und der Rest in Spalte 12 der Fortsetzungszeile. Nur ein alphanumerisches Literal darf auch nach Spalte 12 fortgesetzt werden. Zwischen einer fortgesetzten Zeile und einer Fortsetzungszeile dürfen keine Leerzeilen vorhanden sein.

Beispiel 1

Das Trennen einer Anweisung erfordert kein Fortsetzungszeichen.

Abb. 2.2: Codierformular

Beispiel 2

Abb. 2.3: Fortsetzen eines COBOL-Elements

Beispiel 3

Abb. 2.4: Fortsetzen eines Literals

Beispiel 4

Abb. 2.5: Angabe eines Kommentars

Programmidentifikationsbereich‌ (Spalte 73 bis 80‌)

Dieser Bereich ist für die Aufnahme des Programmnamens‌ vorgesehen. Er kann auch Leerzeichen oder beliebige Zeichen zur Identifikation eines Teiles des Programms enthalten.

2.5.2  Free-form reference format‌

Neuere COBOL-Programme sind in frei aufgeteilten Zeilen mit einer maximalen Länge von 255 Zeichen geschrieben. Es gibt keinerlei Bestimmungen, wo in welcher Zeile ein bestimmtes COBOL-Wort verwendet werden darf.

Standardmäßig ist der Compiler jedoch auf die Interpretation des festen COBOL-Formats programmiert. Um das freie Format benutzen zu können, muss es mithilfe einer Compiler-Direktive eingeschaltet werden. Wie das gemacht werden kann, zeigt das folgende Beispiel.

Compiler-Direktiven‌‌ mit >>‌

Um den Übersetzer mit besonderen Angaben zu steuern, können entsprechende Direktiven nach dem doppelten Größer-Zeichen angegeben werden. Damit wird zum Beispiel auch die ehemalige Spaltenaufteilung von COBOL aufgehoben.

Beispiel
>>SOURCE FORMAT IS FREEIDENTIFICATION DIVISION.PROGRAM-ID. BEISPIEL.*> Jede Zeile beginnt ab Spalte 1 und kann bis zu*> 255 Zeichen lang sein.

Listing 2.19: Setzen einer Compiler-Direktive

Kommentare‌‌ mit *>‌