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