Difference between revisions of "Tutorials/Cobol Tutorial"
m (1 revision(s)) |
Revision as of 17:12, 10 May 2009
Cobol
Diese Seite wurde am 7.4.2002 für ein firmeninternes Abschlussprojekt zu einem Cobol-Programmierpraktikum ins Leben gerufen. Ich freue mich über jeden Leser, adressiere hier aber die Projektteilnehmer.
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