Cobol

Einführung

Geschichte

Die in den sechziger Jahren entwickelte Programmiersprache Cobol (Common Business Oriented Language) eignet sich vor allem bei der Lösung kommerzieller Probleme, bei denen große Datenmengen verarbeitet werden müssen.

Cobol wird zwar schon seit mehreren Jahren als "ausgestorben" betrachtet, es laufen aber noch in vielen Firmen, vor allem auf Großrechenanlagen, Programme die in Cobol geschrieben wurden. Da die meisten dieser Firmen es sich nicht leisten können, ihre Programme einfach "wegzuwerfen" und in moderneren Sprachen neu entwickeln zu lassen, wird es auch weiterhin notwendig sein, die alten Cobol Programme zu warten. Außerdem gibt es für Großrechenanlagen keine Programmiersprachen außer Cobol, mit denen man große Datenmengen einfach verwalten kann. Cobol und Cobol Programme werden also vor allem auf Großrechenanlagen nicht so schnell von den Festplatten "verschwinden".

Cobol ANSI 74 und Cobol ANSI 85

1974 wurde der Aufbau der Sprache das erste Mal im ANSI-Normungsinstitut exakt festgelegt. 1985 wurde die Sprache überarbeitet und neu genormt. Daher spricht man heute von Cobol85 bzw. Cobol ANSI 85.

Durch diese Normung ist die Sprache weitgehend unabhängig von den Eigenheiten bestimmter Datenverarbeitungsanlagen. Das heißt, die in der Norm festgelegten Anweisungen funktionieren mit dem Cobol-Compiler ANSI auf allen Datenverarbeitungsanlagen. Es bestehen keine Unterschiede zwischen PCs und Großrechenanlagen.

In manchen Compilern sind jedoch Zusatzfunktionen integriert, welche von Compilerhersteller und Compilerversion abhängig sind. Erstellt man ein Programm nur mit den in der ANSI-Norm enthaltenen Anweisungen, so sollte jeder Cobol85 Compiler das Programm fehlerfrei übersetzen.

Aufbau

Cobol Programme sind in Divisions und diese in Sections unterteilt. Die Reihenfolge der Divisions und Section muss folgendermaßen aussehen

    IDENTIFICATION DIVISION (ID DIVISION) ENVIRONMENT DIVISION
      CONFIGURATION SECTION INPUT-OUTPUT SECTION
    DATA DIVISION
      FILE SECTION WORKING-STORAGE SECTION LINKAGE SECTION REPORT SECTION
    PROCEDURE DIVISION

Identification Division

Beschreibung

Mit der IDENTIFICATION Division beginnt ein Cobol-Programm. Sie identifiziert das Programm durch Angabe des Programmnamens und weiterer Programminformationen. In neueren Cobol-Compilern für PCs kann diese Division auch weggelassen werden.

Beispiel

IDENTIFICATION DIVISION. Beginn der Division
PROGRAMM-ID. Testprogramm. Name des Programmes
AUTHOR. Martin Stadlbacher. Entwickler
INSTALLATION. 96-11-05. Installation
DATE-WRITTEN. 96-11-03. Entwicklungsdatum
DATE-COMPILED. 96-11-04. Ãœbersetzungsdatum
SECURITY. nur für Testzwecke verwenden. Sicherheitsvermerk

Enviroment Division

Beschreibung

In der ENVIRONMENT Division werden die physikalischen Gegebenheiten, die von der Art der Datenverarbeitungsanlage abhängen, beschrieben.

Die ENVIRONMENT Division besteht aus zwei Sections:

    CONFIGURATION SECTION INPUT-OUTPUT SECTION

Configuration Section

Beschreibung

Diese Section behandelt die Eigenschaften der Übersetzungsanlage und der Ausführungsanlage. Hier wird zum Beispiel angegeben, dass während der Laufzeit der Dezimalpunkt durch ein Komma ersetzt werden soll (SPECIAL NAMES). Auch die Sortierreihenfolge kann, wenn sie von der Standard-Sortierreihenfolge der Laufzeitanlage abweichen soll, in dieser Section definiert werden.

Beispiel

ENVIRONMENT DIVISION. Beginn der Division
CONFIGURATION SECTION. Beginn der Section
SOURCE-COMPUTER. IBM-PC. Anlage auf dem das Programm geschrieben wird
OBJECT-COMPUTER. IBM-PC. Anlage auf dem das Programm ausgeführt wird
SPECIAL-NAMES.
CURRENCY SIGN IS "$". Ändert das Währungszeichen
DECIMAL-POINT IS COMMA. Komma wird statt dem Dezimalpunkt verwendet

Input-Output-Section

Beschreibung

Diese Section behandelt die Angaben, die notwendig sind, um die Übertragung von Daten zwischen dem Programm und den externen Geräten (Rechner) zu steuern.

Es werden hier den verwendeten Dateien Namen zugeordnet, über welche sie im Programm ansprechbar sind. Die Dateien werden weiters einem oder mehreren externen Geräten (z.B. Festplatte, Drucker, ...) über den Dateinamen des Betriebssystems zugeordnet. Außerdem werden dem Betriebssystem die für die Dateiverarbeitung benötigten Informationen bereitgestellt.

Beispiel mit Indexdatei

ENVIRONMENT DIVISION. Beginn der Division
INPUT-OUTPUT SECTION. Beginn der Section
FILE CONTROL. Paragraph für Dateinamen- und Gerätezuordnung
SELECT KUNDE ASSIGN TO "C:\KUNDEN.DAT" Zuweisung des internen Dateinamens und des externen Dateinamens/Gerätes
ACCESS IS DYNAMIC Zugriffsart auf die Datei vom Programm
ORGANIZATION IS INDEXED Angabe des Dateitypes (indiziert)
RECORD KEY KUNDE-NUMMER Angabe des primären Datensatzschlüssel
ALTERNATE KEY KUNDE-NACHNAME Angabe eines weiteren Datensatzschlüssel für
WITH DUPLICATES. direkten Zugriff (nicht eindeutig)

Beispiel sequentieller Datei

ENVIRONMENT DIVISION. Beginn der Division
INPUT-OUTPUT SECTION. Beginn der Section
FILE CONTROL. Paragraph für Dateinamen- und Gerätezuordnung
SELECT DRUCKER1 ASSIGN TO "LPT1" Zuweisung des internen Dateinamens und des externen Gerätes (Drucker)
ACCESS IS SEQUENTIAL Zugriffsart auf die Datei vom Programm
ORGANIZATION IS SEQUENTIAL. Angabe des Dateitypes (sequentiell)

Data Vision

Beschreibung

Die DATA Division dient zur Definition von Datenfeldern (Variablen). Man unterscheidet in Cobol zwei Arten von Daten:

    Daten, die auf externen Datenträgern (z.B. in Dateien) gespeichert werden und programminterne Daten, die nur während der Laufzeit vorhanden sind.

Die DATA Division besteht aus den folgenden vier Sections:

    FILE SECTION WORKING-STORAGE SECTION LINKAGE SECTION REPORT SECTION

File Section

Beschreibung

In dieser Section wird der Aufbau der Dateien (Datensatzaufbau) festgelegt. Jede Datei wird durch eine Dateierklärung und durch die Datensatzbeschreibung definiert.

Die Deklaration von Datenfeldern in der FILE SECTION und auch in der WORKING-STORAGE SECTION erfolgt mittels Stufennummern. Durch die Unterteilung der Datenfelder in mehrere logische Stufen können Datengruppen erzeugt werden, die man in der PROCEDURE Division dann gemeinsam ansprechen kann. Weiters dient die Unterteilung in Stufen auch zur besseren Lesbarkeit des Programmcodes.

Beispiel

DATA DIVISION. Beginn der Division
FILE SECTION. Beginn der Section
FD KUNDE. Datensatzbeschreibung Kunde
01 KUNDE-DATEN. Dekl. Datengruppe Kundendaten
02 KUNDE-NUMMER PIC 99999. Dekl. Kundennummer mit 5 Ziffern
02 KUNDE-NACHNAME PIC X(30). Dekl. Nachname mit 30 Zeichen
02 KUNDE-VORNAME PIC X(30). Dekl. Vorname mit 30 Zeichen
02 KUNDE-ANSCHR PIC X(30). Dekl. Kundenanschrift mit 30 Zeichen
02 KUNDE-PLZ PIC 9999. Dekl. Postleitzahl mit 4 Ziffern
02 KUNDE-ORT PIC X(30). Dekl. Ort mit 30 Zeichen

Working-Storage Section

Beschreibung

Die WORKING-STORAGE SECTION beschreibt die Datenfelder, die nicht in externen Dateien gespeichert werden, sondern deren Werte während der Laufzeit intern erzeugt und verwendet werden.

Beispiel

DATA DIVISION. Beginn der Division
WORKING-STORAGE SECTION. Beginn der Section
01 KUNDE-EINGABEFELDER. Datengruppe der Eingabefelder
02 E-KUNDE-NUMMER PIC ZZZBZZ9. Dekl. Kundennummer mit 5 Ziffern
02 E-KUNDE-NAME. Datengruppe Kundenname
03 E-KUNDE-NACHNAME PIC X(30). Dekl. Nachname mit 30 Zeichen
03 E-KUNDE-VORNAME PIC X(30). Dekl. Vorname mit 30 Zeichen
02 E-KUNDE-ANSCHR PIC X(30). Dekl. Kundenanschrift mit 30 Zeichen
02 E-KUNDE-PLZ PIC ZZZ9. Dekl. PLZ mit führender Nullunterdrückung
02 E-KUNDE-ORT PIC X(30). Dekl. Ort mit 30 Zeichen
01 UMSATZ-DATEN. Dekl. Datengruppe Umsatzdaten
02 UMSATZ-VORJAHR PIC ZZZ.ZZ9,99-. Dekl. Betragszahl mit Nullunterdrückung, Komma und Vorzeichen
02 UMSATZ-HEUER PIC $$$.$$9,99-. Dekl. Betragszahl mit Währungssymbol, Nullunterdrückung, Komma und Vorzeichen
77 AUSWAHL PIC X. Dekl. Auswahlfeld mit einem Zeichen.

Linkage Section

Beschreibung

In dieser Section werden in einem aufgerufenen Programm die Datenfelder angegeben, die vom aufrufenden Programm als Übergabeparameter beim Aufruf mitgegeben wurden. Die Datenfelder müssen hier in der selben Reihenfolge angegeben werden, wie beim aufrufenden Programm.

Beispiel

Procedure Division des aufrufenden Programms

PROCEDURE DIVISION Beginn der Division
HPT. Beginn des Unterprogramms
ACCEPT BEARBEITER Eingabe des Ãœbergabewertes
ACCEPT BUCHUNGSJAHR Eingabe des Ãœbergabewertes
CALL "PROG" USING BEARBEITER
BUCHUNGSJAHR
Aufruf des externen Programms "PROG" mit den Parametern BEARBEITER und BUCHUNGSJAHR

Data Division des aufgerufenen Programms "PROG"

DATA DIVISION. Beginn der Division
LINKAGE SECTION. Beginn der Section
77 BEARBEITER PIC X(15). Ãœbernahmeparameter Bearbeiter von aufrufendem Programm
77 BUCHUNGSJAHR PIC 99. Ãœbernahmeparameter Buchungsjahr von aufrufendem Programm

Report Section

Die REPORT SECTION beschreibt die Gestaltung von Listen und Verzeichnissen.

Eine genauere Beschreibung ist im Kapitel Report-Writer enthalten.

Globale/lokale Datenfelder

Alle in der DATA DIVISION deklarierten Datenfelder können global in der gesamten PROCEDURE DIVISION verwendet werden. Lokale Datenfelder für einzelne Funktionen und Unterprogramme sind in Cobol nicht vorhanden.

Procedure Division

Beschreibung

Die PROCEDURE DIVISION enthält den eigentlichen Programmcode, der zur Lösung eines Problems notwendig ist. Die Anweisungen in der PROCEDURE DIVISION können in SECTIONS und in Unterprogramme gegliedert werden.

Beispiel

PROCEDURE DIVISION. Beginn der Division
MAIN SECTION. Beginn der Section
KUNDENEINGABE. Beginn des Unterprogramms
DISPLAY "Kundendaten eingeben" UPON
TERMINAL
Ausgabe der Meldung zwischen dem Komma auf dem Bildschirm
DISPLAY "Eindeutige Kundennummer"
UPON TERMINAL
Ausgabe der Meldung auf dem Bildschirm
ACCEPT E-KUNDE-NUMMER FROM TERMINAL Eingabe der Kundennummer von Tastatur
DISPLAY "Familienname des Kunden"
UPON TERMINAL
Ausgabe der Meldung auf dem Bildschirm
ACCEPT E-KUNDE-NACHNAME FROM TERMINAL Eingabe des Nachnamen von Tastatur
DISPLAY "Kunde speichern (J/N)" UPON
TERMINAL
Ausgabe der Meldung auf dem Bildschirm
PERFORM WITH TEST AFTER UNTIL AUSWAHL
= ("J" OR "N")
Schleife mit 1-N Durchläufen bis J oder N in Feld Auswahl eingegeben wird
ACCEPT AUSWAHL FROM TERMINAL Eingabe der Auswahl von Tastatur
END-PERFORM Ende der Schleife
IF AUSWAHL="J" Abfrage der Variable
PERFORM KUNDSCHREIB Aufruf des Unterprogramms
END-IF Ende der If-Abfrage
STOP RUN. Ende des Programmablaufes
KUNDSCHREIB. Beginn des Unterprogramms
MOVE E-KUNDE-NUMMER TO KUNDE-NUMMER Ãœbertragung des Inhaltes von E-KUNDE-NUMMER in KUNDE-NUMMER
MOVE E-KUNDE-NACHNAME TO
KUNDE-NACHNAME
Ãœbertragung des Inhaltes von E-KUNDE-NACHNAME in KUNDE-NACHNAME
OPEN OUTPUT KUNDE Öffnen der Datei zum Schreiben
WRITE KUNDE-DATEN Schreiben des Datensatzes in die externe Datei
INVALID KEY Wenn Schlüssel bereits in Datei vorhanden ist
DISPLAY "Satz nicht speichern" UPON
TERMINAL
Ausgabe der Meldung am Bildschirm
NOT INVALID KEY Wenn Speichern in Ordnung
DISPLAY "Satz gespeichert" UPON
TERMINAL
Ausgabe der Meldung am Bildschirm
END-WRITE Ende der WRITE-Anweisung
CLOSE KUNDE. Schließen der Datei KUNDE

Report Writer

Beschreibung

Mit dem Report-Writer ist es möglich Listen und Verzeichnisse einfach zu erstellen, ohne dafür eigene umfangreiche Prozeduren in der PROCEDURE DIVISION zu schreiben.

Es ist möglich, Daten aus verschiedenen Dateien zu mischen, zu sortieren, nach verschiedenen Kriterien zu gruppieren und das Ergebnis in Form eines Reports in eine Datei oder auf den Drucker auszugeben.

Deklarationen in Data Vision

Der genaue Aufbau des Reports muss in der DATA DIVISION festgelegt werden.

Es ist möglich, Überschriften, Kopfzeilen, Fußzeilen und Seitenlängen für die Listenseiten zu definieren. Weiters müssen die Datenfelder, die ausgegeben werden sollen, an den gewünschten Positionen im Report mit den gewünschten Feldlängen deklariert werden. Hierzu können alle Datenfeldformate verwendet werden.

Zusätzlich ist es auch möglich, verschiedenste Arten von Summen (Gruppensumme, Gesamtsumme, ...) in den Report einzubinden (siehe Beispiel).

Deklarationen in der Procedure Division

In der PROCEDURE Division kann die Erstellung des Reports, der in der DATA Division vollständig beschrieben wurde, durch die folgenden drei Anweisungen gestartet werden

    INITIATE Führt die Initialisierung der Listen durch. GENERATE Erstellt die eigentliche Liste mit den Daten aus den Dateien. TERMINATE Schließt die Erstellung ab und beendet die Listenerstellung.

Durch den Einsatz des Report-Writers kann sich der Programmierer eigene umfangreiche Routinen für die Erstellung von Listen ersparen.

Allgemeine Syntax

In der IDENTIFICATION-, der ENVIRONMENT- und der DATA DIVISION müssen alle Anweisungen auf dem A-Rand (Bildschirmstelle 8) beginnen. Jede Anweisungszeile muss mit einem Punkt abgeschlossen werden.

In der PROCEDURE DIVISION müssen SECTION- und Unterprogrammnamen auf dem A-Rand, alle anderen Anweisungen auf dem B-Rand (Bildschirmstelle 12) geschrieben werden.

Ein Punkt zum Abschluß der Anweisungszeile ist ebenfalls nur bei SECTION- und Unterprogrammnamen sowie bei der letzten Anweisung in einer SECTION bzw. in einem Unterprogramm erforderlich (z.B. STOP RUN. als letzte Anweisung eines Unterprogramms). Alle anderen Anweisungen können ohne Punkt geschrieben werden.

Wird an der Bildschirmstelle 7 ein Stern (*) geschrieben, so wird die gesamte Zeile als Kommentar betrachtet und nicht kompiliert. Wird an der Bildschirmstelle 7 ein Strich (-) geschrieben, so kann der Text der vorhergehenden Zeile fortgesetzt werden.

1755 Worte in "deutsch"  als "hilfreich"  bewertet