COBOL Tobias Denzler Eve Morel Für das Seminar: 10 Programmiersprachen COBOL Common Business Oriented Language Cobol verwirrt das Gehirn; diese Sprache zu lehren, sollte deshalb als kriminelle Tat verfolgt werden. Edsger W. Dijkstra 1
Geschichte 1959 US-Verteidigungsministerium und Industrie gründen CODASYL (COnference on DAta SYstems Languages) 1960 Erste COBOL-Normung 1968, 1974, 1985, 2002 neue, erweiterte COBOL-Normen Ein paar Zahlen 1997: ca. 300 Billionen Code-Zeilen. Davon 80 % in Cobol und 20% in restlichen existierenden Programmiersprachen 1999: 50% aller kritischen Applikationen werden in COBOL programmiert. 2
Anwendungen Betriebliche Datenverarbeitung Einsatzschwerpunkt im Verarbeitungsteil (embedded SQL) Integration von COBOL in.net in aspx Seiten <%@ page language="cobol" %> <script runat="server"> OBJECT. DATA DIVISION. WORKING-STORAGE SECTION. 77 I PIC S9(5) COMP-5. END OBJECT. </script> Vorteile Leicht lesbar, wenn man Englisch versteht. Selbstdokumentierend Luxuriöse Druckausgabe und Gestaltungsmöglichkeit Portabel Wartbar (man weiss genau wo was zu ändern ist) 3
Nachteile Viel Schreibarbeit, da fast vollständige englische Sätze. Aufbau eines Cobol-Programms folgt einem starren Schema. Programmaufbau Idee: Das traditionelle Codierschema bei Cobol entspricht der Lochkarte mit ihren 80 Spalten, d.h. Schreibstellen. 4
Codierschema 1-6: Numerierung der Zeile 7: Steuerungsfunktionen 8-11: A-Rand: Überschriften (DIVISON, SECTION, ) 12-72: B-Rand: übrigen Anweisungen (Eintrag, Satz) 73-80: Bemerkungen, Kommentare HelloWorld IDENTIFICATION DIVISION. PROGRAM-ID. HelloWorld. DATA DIVISION. PROCEDURE DIVISION. Welcome. DISPLAY Hello World STOP RUN. 5
Programm Struktur Vier Hauptteile: DIVISIONS unterteilt in SECTIONS unterteilt in PARAGRAPHEN IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION IDENTIFICATION DIVISION (allgemeine einleitende Bemerkungen besteht nur aus Paragraphen) Beispiel IDENTIFICATION DIVISION. PROGRAM-ID. Test-Beispiel. AUTHOR. Denzler-Morel. INSTALLATION. Basel. DATE-WRITTEN. Mai 2007. DATE-COMPILED. SECURITY. NONE. REMARKS. ANSI-85. Regeln für Paragraphen Beginnt mit Überschrift und neuer Zeile Überschrift endet mit einem Punkt Nach einem Punkt kommt einen Leerschlag oder eine neue Zeile Paragraph endet mit einem Punkt Nur PROGRAM-ID ist obligatorisch 6
ENVIRONMENT DIVISION (beschreibt Programmumgebung) Beispiel ENVIRONEMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. Windows. OBJECT-COMPUTER. Windows. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT Bestell-file ASSIGN TO RANDOM B:Best.Dat. SELECT DRUCKER ASSIGN TO PRINT PRN. Diese Division ist nicht obligatorisch (seit COBOL-85) CONFIGURATION SECTION beschreibt Rechnerausstattung INPUT-OUTPUT SECTION beschreibt Verbindung zwischen Programm und externen Medien DATA DIVISION (alle Daten werden hier definiert) Beispiel DATA DIVISON. FILE SECTION. FD BESTELL-FILE. 01 BESTELLSATZ. 05 Bestell-Nr PIC 9(4). 05 Kunden-Nr PIC 9(10). 05 Kunden-Name PIC X(28). FD DRUCKER. 01 Zeile PIC X(132). WORKING-STORAGE SECTION. 77 Zeilenzähler PIC 99. 01 UEBERSCHRIFT. 05 FILE SECTION: Strukturen der Datensätze und Datentypen für externe Dateien. WORKING-STORAGE SECTION: Daten die intern im Programm erzeugt werden. (lediglich im Arbeitsspeicher) LINKAGE SECTION: Daten, die ein (mit CALL) aufgerufenes Unterprogramm benutzen soll. Alle drei SECTION sind optional. Wenn aber benutzt in dieser Reihenfolge. Falls keine der SECTION benötigt wird (unrealistisch), muss zumindest DATA DIVISION. angegeben werden. LINKAGE SECTION.... 7
PROCEDURE DIVISION (beschrieb der einzelnen Verarbeitungsschritte) Beispiel PROCEDURE DIVISION. EINGABE. DISPLAY Kapital?, ACCEPT KAPITAL. DISPLAY Zinsfuss, ACCEPT ZINSFUSS. BERECHNUNG. COMPUTE Endkapital = Kapital * (1 + Zinsfuss / 100). AUSGABE. DISPLAY ENDKAPITAL : Endkapital STOP RUN. SECTIONS und PARAGRAPHEN werden vom Programmierer benannt. SECTIONS sind nicht obligatorisch, aber wenn es welche gibt ist folgendes zu beachten: Keine Paragraphen oder Anweisungen die nicht einer SECTION untergeordnet ist. Wenn eine SECTION in Paragraphen unterteilt ist, müssen alle SECTIONS Paragraphen beinhalten. STOP RUN. kennzeichnet das logische Programm- Ende. DATA DIVISION: Datenhierarchie Datenelemente Gruppen Datensätze Datenfeld Zusammenfassung von Datenfelder Zusammenfassung von Datenelementen und Gruppen Stufennummern 01 bis 49 Oberste Ebene ist der Datensatz (Nummer 01) Niedrigere Hierarchiestufen haben eine höhere Nummer Gleiche Ebenen haben die gleiche Nummer Stufennummern müssen nicht durchgehend benutzt werden 8
Datenhierarchie Beispiel 01 ANSCHRIFT. (Datensatz) 02 NAME. (Gruppe) 03 VORNAME. (Datenelement) 03 NACHNAME. (Datenelement) 02 ADRESSE. (Gruppe) 03 STRASSE. (Datenelement) 03 WOHNORT. (Gruppe) 10 PLZ. (Datenelement) 10 ORT. (Datenelement) Datentypen 3 Datenfelder: Alphabetische (Alphabet und Leerzeichen, definiert durch A ) Alphanumerische (Alle Zeichen, definiert durch X ) Numerische (nur Ziffern, definiert durch 9 ) B steht für Blank also Leerschlag (um einen Leerschlag zu erzwingen) Datentypen können gemischt werden (siehe Beispiel) Datenlänge: Wird definiert durch Wiederholung des Zeichens oder durch Angabe in Klammern 9
Datentyp Beispiele PIC XXXX (vierstelliges alphanumerisches Datenelement) PIC X(4) ( ) PIC 9(10) (zehnstelliges numerisches Datenelement) PIC A(5)B99BA(3) (Beispielwert: morel 79 fem) PIC 999V99 (V steht für Komma, Beipiel: 123.45) PIC S999V99 (S steht für Vorzeichen, Beipsiel: -123.45) 77 Zeilenzähler VALUE 1. (Variable Zeilenzähler wird direkt mit 1 initialisiert) Datentyp Beispiel 01 ANSCHRIFT. 02 NAME. 03 VORNAME. PIC A(10) 03 NACHNAME. PIC A(10) 02 ADRESSE. 03 STRASSE. PIC X(15) 03 WOHNORT. 10 PLZ. PIC 9(4) 10 ORT. PIC X(10) 10
PROCEDURE DIVISION: Anweisungen Unbedingte Anweisungen: (Befehl wird sofort ausgeführt) ACCEPT SUBSTRACT MOVE RUN CLOSE ADD DELETE STOP DISPLAY COMPUTE READ WRITE MULTIPLY DIVIDE OPEN Bedingte Anweisungen: (Befehl mit Bedingung) IF PERFORM EVALUATE Vergleichsoperatoren: IS [NOT] GREATER THAN IS [NOT] > Verknüpfungen: AND OR IS [NOT] EQUAL TO IS [NOT] LESS THAN IS [NOT] = IS [NOT] < NOT Beispiele von Anweisungen MULTIPLY wert BY 5 GIVING result MULTIPLY wert BY 5 COMPUTE result = wert*5 wert bleibt wert, result = wert*5 wert = wert*5 COMPUTE result1 ROUNDED, result2 = ((9*9)+8/5) result1 = 18, result2 = 17,8 ADD 10 TO wert MOVE 10 TO wert wert = wert+10 wert wird mit 10 belegt MOVE ZERO TO MAX DISPLAY Zahl eingeben:, ACCEPT WERT PERFORM UNTIL WERT = 0 IF WERT > MAX MOVE WERT TO MAX END-IF DISPLAY Zahl eingeben:, ACCEPT WERT END-PERFORM DISPLAY Die grösste Zahl war:, MAX STOP RUN. 11
I/O Dateien schreiben ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT Datei ASSIGN TO 'output.dat'. DATA DIVISION. FILE SECTION. FD Datei LABEL RECORD STANDARD. 01 Zeile PIC X(80). PROCEDURE DIVISION. OPEN OUTPUT Datei. WRITE Zeile (Datei öffnen) (Daten schreiben) I/O Dateien lesen OPEN INPUT Datei. READ Datei AT END MOVE 'E' TO S-Ende. PERFORM UNTIL S-Ende = 'E' END-PERFORM. Dateien schliessen CLOSE Datei (Datei schliessen) 12
Quellen http://www.csis.ul.ie/cobol/course/ http://de.wikipedia.org/wiki/cobol http://www.cobolstandards.com/ http://www.cs.vu.nl/grammars/cobol/ Diverse Bücher: COBOL auf dem PC, G.Barta / W.Maresch COBOL der Einstieg, Andreas Tietz Programmieren mit COBOL, Klaus Arzdorf (Tutorial) (Grammatik, Keywords) Aufheiterung :-) Humans can write music, start wars, build cities, create art, fall in love, dream of colonizing the solar system, but they cannot write bug-free COBOL. James Martin 13