Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
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:
Seitenzahl: 377
Veröffentlichungsjahr: 2023
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Uwe Rozanski
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
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.
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
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.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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:
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.
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.
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.
Listing 2.3: Aufbau eines COBOL-Programms
Eine detaillierte Beschreibung der einzelnen DIVISIONs und SECTIONs finden Sie in Kapitel 3.
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.
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
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.
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.
Listing 2.18: Typisches COBOL-Listing
Jede Zeile wird wie folgt eingeteilt:
Dieser Bereich enthält eine fortlaufende Zahl zur Nummerierung der Programmzeilen oder Leerzeichen.
Im A-Bereich müssen die nachfolgenden COBOL-Elemente begonnen werden:
Teilüberschriften (DIVISIONs)
Kapitelüberschriften (SECTIONs)
Paragraphennamen
StufenbezeichnungenFD, SD
Stufennummern 01 und 77
Die Stufennummern 66 und 88 können im A-Bereich beginnen.
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.
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.
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.
Das Trennen einer Anweisung erfordert kein Fortsetzungszeichen.
Abb. 2.2: Codierformular
Abb. 2.3: Fortsetzen eines COBOL-Elements
Abb. 2.4: Fortsetzen eines Literals
Abb. 2.5: Angabe eines Kommentars
Dieser Bereich ist für die Aufnahme des Programmnamens vorgesehen. Er kann auch Leerzeichen oder beliebige Zeichen zur Identifikation eines Teiles des Programms enthalten.
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.
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.
Listing 2.19: Setzen einer Compiler-Direktive
