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
-
FILE SECTION WORKING-STORAGE SECTION LINKAGE SECTION REPORT SECTION
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