Cobol
From ThorstensHome
Home < Tutorials < Cobol Tutorial
This site has been created on 2002-04-07 for a training I gave on Cobol. It was address to the training participants.
Abk.
Cobol
Common bussiness oriented language, solltet ihr schonmal gehört haben ;-) Eine an kaufmännischen Anforderungen ausgerichtete Programmiersprache der 60er Jahre, besonders beliebt im Großrechner-Umfeld. Da hier elegante (und unverständliche) Befehle wie unless ($query->param()) { unmöglich sind, wird Cobol auch die "Prosa der Programmiersprachen" genannt. Eine (vom Alter und vom Einsatz) vergleichbare Programmiersprache ist PL/1.
ISPF
Ist die Menüumgebung des TSO. Gäbe es kein ISPF, müsstet ihr zum Kopieren statt 3.4 (das geht, probiert es mal aus) umständliche Kommandobefehle wie unter der bash bei Linux oder damals unter der Shell von DOS eingeben. Wenn ihr die Langform von ISPF kennt, klickt bitte hier.
TSO
Time-Sharing-Option, ein System unter OS/390 unter dem Dateioperationen und JCL-Programmläufe möglich sind. Hierarchisch befindet es sich auf der gleichen Ebene wie CICS, es wird von OS/390 direkt aufgerufen.
OS/390
Operating System 390, das Betriebssystem, mit dem der Großrechner seine Ressourcen und Geräte verwaltet und Eingaben entgegen nimmt.
JCL
Job Control Language, ein unter TSO über den ISPF aufzurufendes System, das Befehle bereitstellt, die Programme kopieren, compilieren, ausführen usw..
CICS
Customer Information Control System, ein System, dass den Dialog mit dem Großrechner ermöglicht. Ihm werden die Befehle syntaktisch wie SQL übermittelt: durch einen EXEC CICS-Block im Cobol-Sourcecode. CICS ist nicht Gegenstand unseres Tutorials.
SQL
Structured Query Language, eine Datenbankabfragesprache (der IVten Generation), speziell auf relationalen und objektrelationalen Datenbankmanagementsystemen eingesetzt.
Sourcecode
Hier nun ein Beispiel-Cobol-Sourcecode eines noch nicht ganz fertigen Programms. Wichtig sind dabei speziell die Abstände zum linken Rand, da ein falscher Abstand (eine unkorrekte Anzahl an Leerzeichen) einen Fehler erzeugen kann.
***************************************************************** 00010003
* ----------------------- 00020003
* Programm zur Dateibehandlung von Thorsten 00030024
* 00040003
***************************************************************** 00050003
* 00060003
* Dieses Programm liest einen Datensatz aus einer sequentiellen 00070024
* Datei ein, berprft ihn, und schreibt ihn, falls fehlerhaft, 00080024
* in eine Fehlerdatei, andernfalls in eine Ausgabedatei. 00090024
* u123105.cobol.cobol(dat) (c) 16.10.1 by Thorsten Strk 00100024
*---------------------------------------------------------------- 00110003
00120024
IDENTIFICATION DIVISION. 00130003
*---------------------------------------------------------------- 00140003
PROGRAM-ID. ourfirst. 00150012
* 00160003
*---------------------------------------------------------------- 00170003
ENVIRONMENT DIVISION. 00180003
*---------------------------------------------------------------- 00190003
* 00200003
CONFIGURATION SECTION. 00210003
SOURCE-COMPUTER. IBM-OS390. 00220008
OBJECT-COMPUTER. IBM-OS390. 00230008
SPECIAL-NAMES. 00240003
00250024
input-output section. 00260024
file-control. 00270024
select eingabe assign to eindat. 00280045
select ausgabe assign to ausdat. 00290026
select fehler assign to fehldat. 00300026
* 00310003
*---------------------------------------------------------------- 00320003
DATA DIVISION. 00330003
*---------------------------------------------------------------- 00340003
* 00350003
file section. 00360024
fd eingabe 00370048
block contains 0 records. 00380047
01 ein-satz. 00390024
05 e-name pic x(15). 00400024
05 e-str pic x(20). 00410024
05 e-plz pic 9(5). 00420024
05 e-ort pic x(15). 00430024
05 e-an pic x. 00440024
05 messwerte pic x(48). 00450024
fd ausgabe 00460048
block contains 0 records. 00470047
01 aus-satz. 00480024
05 a-name pic x(15). 00490024
05 a-str pic x(20). 00500024
05 a-plz pic 9(5). 00510024
05 a-ort pic x(15). 00520024
05 a-an pic x. 00530024
05 messwert2 pic x(48). 00540053
fd fehler 00550048
block contains 0 records. 00560047
01 fehl-satz. 00570029
05 a-name pic x(15). 00580029
05 a-str pic x(20). 00590029
05 a-plz pic 9(5). 00600029
05 a-ort pic x(15). 00610029
05 a-an pic x. 00620029
05 messwert3 pic x(48). 00630053
WORKING-STORAGE SECTION. 00640003
01 artikel pic x(3). 00650024
01 dateiende pic 9 value 0. 00660036
01 falsch pic 9 value 0. 00670037
* 00680003
* 00690003
*---------------------------------------------------------------- 00700003
PROCEDURE DIVISION. 00710003
*---------------------------------------------------------------- 00720003
* 00730003
MAIN SECTION. 00740003
MAIN-S. 00750003
display 'Unberechtigtes Vervielfltigen verboten !!!' 00760012
open input eingabe, output ausgabe, output fehler 00770032
perform until dateiende = 1 00780036
read eingabe at end move 1 to dateiende 00790036
end-read 00800033
if dateiende = 0 then perform reaktion 00810054
end-if 00820055
end-perform. 00830033
close eingabe, ausgabe, fehler. 00840033
continue. 00850025
MAIN-X. 00860003
STOP RUN. 00870003
reaktion section. 00880033
move '0' to falsch. 00890043
if e-name=' ' then 00900041
move '1' to falsch 00910040
move 'Name ist leer' to fehl-satz 00920039
write fehl-satz 00930036
end-if 00940036
if e-str=' ' then 00950041
move '1' to falsch 00960040
move 'Str. ist leer' to fehl-satz 00970039
write fehl-satz 00980036
end-if 00990036
if e-plz=' ' then 01000041
move '1' to falsch 01010040
move 'PLZ ist leer' to fehl-satz 01020039
write fehl-satz 01030036
end-if 01040036
if e-plz is not numeric then 01050049
move '1' to falsch 01060049
move 'PLZ nicht numerisch' to fehl-satz 01070049
write fehl-satz 01080049
else 01090049
if not (e-plz>01066 and e-plz<99999) 01100051
move '1' to falsch 01110049
move 'PLZ im falschen Bereich' to fehl-satz 01120049
write fehl-satz 01130049
end-if 01140049
end-if 01150049
if e-ort=' ' then 01160041
move '1' to falsch 01170040
move 'Ort ist leer' to fehl-satz 01180039
write fehl-satz 01190036
end-if 01200036
if not (e-an='W' or e-an='M') then 01210051
move '1' to falsch 01220040
move 'GKZ fehlerhaft' to fehl-satz 01230039
write fehl-satz 01240036
end-if 01250036
if messwerte is not numeric then 01260052
move '1' to falsch 01270052
move 'Messwerte nicht numerisch' to fehl-satz 01280052
write fehl-satz 01290052
end-if 01300052
if falsch = 0 then 01310040
move ein-satz to aus-satz 01320039
write aus-satz 01330036
else move ein-satz to fehl-satz 01340039
write fehl-satz 01350036
end-if 01360036
01370036
exit. 01380033

