238 26 11MB
German Pages 172 [176] Year 1981
de Gruyter Lehrbuch Hambeck • Programmieren in C O B O L
Klaus Hambeck
Einführung in das
Programmieren in COBOL 3.,verbesserte Auflage
W DE
_G Walter de Gruyter • Berlin • New York 1981
CIP-Kurztitelaufnahme der Deutschen
Bibliothek
Hambeck, Klaus: Einführung in das Programmieren in COBOL / Klaus Hambeck. 3., verb. Aufl. - Berlin ; New York : de Gruyter, 1981. (de-Gruyter-Lehrbuch) ISBN 3-11-008693-X
©Copyright 1981 by Walter de Gruyter & Co., vormals G. J. Göschen'sche Verlagshandlung. J. Guttentag, Verlagsbuchhandlung Georg Reimer, Karl J. Trübner, Veit & Comp., Berlin 30. Alle Rechte, insbesondere das Recht der Vervielfältigung und Verbreitung sowie der Übersetzung, vorbehalten. Kein Teil des Werkes darf in irgendeiner Form (durch Fotokopie, Mikrofilm oder ein anderes Verfahren) ohne schriftliche Genehmigung des Verlages reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Printed in Germany. Satz: IBM-Composer, Walter de Gruyter, Berlin. Druck: Karl Gerike, Berlin. Bindearbeiten: Dieter Mikolai, Berlin.
Vorwort zur ersten Auflage Die Anwendung von Elektronischen Datenverarbeitungsanlagen in fast allen Bereichen unseres täglichen Lebens ist nahezu selbstverständlich geworden. Neben der immer weiter fortschreitenden Technologie ist vor allem der wirtschaftliche Einsatz der Anlagen für die Anwender von Interesse. Dabei spielt die Zeitspanne von der Formulierung eines Problems bis zu seiner Lösung eine wesentliche Rolle. Das Streben nach Einfachheit und Kompatibilität in ihrer Anwendung ließ die heute verbreiteten höheren Programmiersprachen entstehen. In dem vorliegenden Buch wird die problemorientierte Programmiersprache COBOL (COmmon Business Oriented Language) behandelt. Sie eignet sich besonders für kommerzielle Anwendungen, was jedoch ihren Einsatz auf teilweise verwandten Gebieten nicht ausschließen soll. Dieses Buch soll dem Leser, welcher noch keine Erfahrung in der Programmierung gesammelt hat, ein ausbaufähiges Wissen über COBOL vermitteln, um seine fachlichen Probleme anhand dieser Sprache von einer Elektronischen Rechenanlage bearbeiten zu lassen. Der Text vermittelt grundlegende Kenntnisse über EDV-Anlagen, wie sie zum Verständnis von COBOL benötigt werden, und fuhrt den Leser über fortlaufend schwieriger werdende Beispielaufgaben in die gebräuchlichsten Anwendungen von COBOL ein. Der Band ist als Lehrbuch und vor allem auch für den Selbstunterricht gedacht. Durch die kurzgefaßten Formatangaben der einzelnen COBOL-Befehle soll er darüber hinaus eine Hilfe sein fiir den Programmierer, der sich nur eben einmal unklar über die Auslegung und den Gebrauch eines COBOL-Befehlswortes ist. Die Gestaltung des Stoffes ist in Kursen entstanden, welche der Verfasser bei verschiedenen Fachschulen für Datenverarbeitung und Firmen abgehalten hat. Mein Dank gilt der GfS, Gesellschaft für Systementwicklung in München sowie allen denjenigen, welche durch Anregungen und Diskussionen indirekt an diesem Buch mitgewirkt haben. Dem Verlag gilt mein Dank für das zum Zustandekommen dieses Buches entgegengebrachte Interesse und die gute Zusammenarbeit. München, im Januar 1973
Klaus Hambeck
Vorwort zur zweiten Auflage Nachdem seit etwa 1975 die EDV-Hersteller dazu übergegangen sind, das durch das ,.American National Standard Institute" herausgegebene ANS-COBOL einzusetzen, ist zu beobachten, daß COBOL bei den EDV-Anwendern wieder verstärkten Zuspruch findet. Die zweite Auflage dieses Lehrbuchs trägt dieser standardisierten COBOL-Fassung Rechung und behandelt die diesem Standard entsprechenden Anweisungen und Möglichkeiten von ANS-COBOL. Am grundsätzlichen Aufbau und der Logik von COBOL zu ANS-COBOL hat sich jedoch nichts geändert, so daß der Aufbau des Buches beibehalten werden konnte. Lediglich formelle Änderungen, bedingt durch den ANS-COBOL-Standard wurden aufgenommen. Ebenso wurden Verbesserungen und Korrekturen eingearbeitet, welche mir die Leser der ersten Auflage freundlicherweise mitgeteilt haben. Für die Stellungnahmen zur ersten Auflage möchte ich mich bedanken und hoffe, daß die Leser auch in Zukunft davon Gebrauch machen werden. München, im August 1977
Klaus Hambeck
Vorwort zur dritten Auflage Neuauflagen eines Lehrbuches sind nicht nur Beweis seiner Beliebtheit, sondern auch Ausdruck eines zunehmenden Interesses an seiner Thematik. Ohne Zweifel gehört die problemorientierte Programmiersprache COBOL nicht nur zur Standard-Softwareausrüstung von EDV-„Großanlagen", sie findet vielmehr auch bei EDV-Anlagen der „mittleren Datentechnik" in steigendem Maße Anwendung. In die vorliegende dritte Auflage des Lehrbuches wurden notwendige formelle Änderungen und Verbesserungen eingearbeitet, ohne den bisher bewährten Aufbau des Werkes anzutasten. München, im April 1981
Klaus Hambeck
Inhaltsverzeichnis 1. 1.1 1.2. 1.2.1. 1.2.2. 1.2.3.
Einfuhrung Geschichtliches Allgemeines über elektronische Datenverarbeitungsanlagen Informationsdarstellung Programmiersprachen Programmablaufplan
1 1 3 5 5 8
2. 2.1. 2.2. 2.2.1. 2.2.2. 2.3 2.4.
Allgemeines über die COBOL-Sprache In der COBOL-Sprache verwendete Zeichen Wortkategorien in der COBOL-Sprache COBOL-Wörter Programmier-Wörter Bedeutung der in diesem Buch vorgenommenen Schreibweise COBOL-Programmschema
3.
Aufbau der COBOL-Sprache
21
3.1. 3.2. 3.3 3.3.1. 3.3.1.1. 3.3.1.2. 3.3.1.3. 3.3.2. 3.3.3. 3.3.4. 3.3.5. 3.3.5.1. 3.3.6. 3.3.7. 3.4.
IDENTIFICATION DIVISION (Erkennungsteil) ENVIRONMENT DIVISION (Maschinenteil) DATA DIVISION (Datenteil) Stufenkonzept Datensatzerklärung Datenelementerklärung Bedingungsnamen PICTURE-Klausel USAGE-Klausel VALUE-Klausel FILE-SECTION Dateierklärung WORKING-STORAGE SECTION LINKAGE SECTION PROCEDURE DIVISION (Prozedurteil)
21 23 24 25 25 27 27 28 30 36 37 38 42 43 44
4. 4.1. 4.1.1. 4.1.2. 4.1.3. 4.1.4. 4.1.5.
Programmierung in COBOL (sequentielle Verarbeitung) Aufgabel Marken OPEN - Befehlswort CLO SE - Befehlswort READ-und WRITE - Befehlswort GO TO - Befehlswort
45 45 48 48 48 49 50
...
.
11 11 12 12 13 17 19
VIII 4.1.6. 4.1.7. 4.1.8. 4.1.9. 4.2. 4.2.1. 4.2.2. 4.2.2.1. 4.2.3. 4.2.4. 4.2.5. 4.2.6. 4.2.7. 4.3. 4.3.1. 4.3.2. 4.3.3. 4.3.4.
MOVE - Befehlswort (einfache Darstellung) STOP - Befehlswort COBOL - Begriffe Erklärungen zu Aufgabe 1 Aufgabe 2 FILLER Konstante Wertzuweisungen Figurative Konstanten Druckaufbereitung Programmablaufplan zu Aufgabe 2 IF - Befehlswort Zeilensteuerung Programmierung der Aufgabe 2 Aufgabe 3 ADD - Befehlswort SUBTRACT - Befehlswort MULTIPLY - Befehlswort DIVIDE - Befehlswort
4.3.5. 4.3.6. 4.3.6.1. 4.3.6.2. 4.3.6.3. 4.3.6.4. 4.3.6.5. 4.3.6.6. 4.4. 4.4.1. 4.4.2. 4.4.3. 4.4.4. 4.4.5. 4.4.6. 4.4.7. 4.5. 4.5.1. 4.6. 4.6.1. 4.6.2. 4.6.3.
COMPUTE - Befehlswort Erklärungen zu Aufgabe 3 COBOL-Anweisung COBOL-Programmsatz COBOL-Paragraph COBOL-Kapitel PERFORM - Befehlswort Abänderung der Aufgabe 3 in Aufgabe 3 a Weitere COBOL-Befehlswörter und deren Anwendung MOVE - Befehlswort (erweiterte Darstellung) DISPLAY - Befehlswort ACCEPT - Befehlswort ALTER - Befehlswort EXAMINE - Befehlswort NOTE - Befehlswort Fortsetzung von nichtnumerischen Literalen Aufgabe 4 (Rechnungsschreibung) Erklärungen zu Aufgabe 4 OCCURS-Klausel Subskribierung Indizierung Programmschleifen
50 52 52 53 55 56 57 57 59 63 65 70 71 73 73 77 78 79 80 81 81 81 82 83 84 86 87 87 91 92 93 94 97 97 98 100 100 107 110 113
IX
4.6.4. 4.7. 4.7.1. 4.7.2.
Aufgabe 5 (Tabellenverarbeitung) Übungsaufgaben (sequentielle Verarbeitung) Übung 1 (Bestandsfortschreibung) Übungs 2 (Lohnsteuerberechnung)
114 116 116 118
5. 5.1. 5.1.1. 5.1.2. 5.1.3. 5.2. 5.3.
121 121 121 122 124 125
5.4. 5.4.1. 5.4.2.
Programmierung in COBOL (Indexsequentieller Teil) Indexsequentielle Dateibehandlung (Index-Methode) Erstellen einer Index-Datei Sequentielle Verarbeitung einer Index-Datei Wahlfreie Verarbeitung einer Index-Datei Aufgabe 6 (Erstellen einer Index-Datei) Aufgabe 7 (Rechnungsschreibung mit indexsequentieller Verarbeitung) Übungsaufgaben (indexsequentielle Verarbeitung) Übung 3 (Änderungsdienst) Übung 4 (Reorganisieren einer Index-Datei)
6. 6.1. 6.2 6.3 6.3.1.
Unterprogramme ENTER - Befehlswort LINKAGE SECTION Programmierung von Unterprogrammen Aufgabe 8 (Längenberechnung mit Unterprogramm)
134 135 137 138 138
127 132 132 133
Anhang A Anhang B AnhangC
144 150 153
Anhang D Stichwortverzeichnis
160 161
I.Einführung Diese Einführung soll dem Leser einen Überblick über die Programmiersprache COBOL (Common Business Oriented Language) vermitteln, wie er benötigt wird, um die Kapitel 2 bis 6 vollständig und ohne große Schwierigkeiten zu verstehen. Es wird in diesem Abschnitt sowohl auf die geschichtliche Entwicklung von COBOL eingegangen sowie auf das zur Beherrschung einer Programmiersprache wie COBOL notwendige Anfangswissen über den Aufbau und die Arbeitsweise einer „Elektronischen Datenverarbeitungs-Anlage" (EDV-Anlage). Dieses Buch ist im wesentlichen als Lehrbuch gedacht, mit dessen Hilfe ein Lernender, der bis dato noch nichts Umfassendes über COBOL erfahren hat, ein allgemein gehobenes und ausbaufähiges Programmierwissen über diese Sprache erlangen kann. Aus diesem Grunde sind alle zu sehr speziellen Anwendungen in COBOL nicht in dieses Buch aufgenommen worden, um mehr Raum für diejenigen Anwendungen zu bekommen, welche auf jeden Fall zum Grundwissen eines COBOL Programmierers gehören sollten. Das hier vorliegende Lehrbuch beschreibt die 1974 unter dem Namen „ANSCOBOL" veröffentlichte standardisierte Form dieser Programmiersprache. 1.1. Geschichtliches Am 28. und 29. Mai 1959 wurde im Pentagon zu Washington eine Sitzung abgehalten, um zu erörtern, ob es wünschenswert und durchführbar sei, eine allgemeine Programmiersprache für elektronische Datenverarbeitungsanlagen für kommerzielle Anwendungsgebiete zu schaffen. Auf dieser Sitzung waren sowohl die Vertreter von Anwendern als auch von Rechnerherstellern anwesend und man kam überein, daß dieses Projekt in Angriff genommen werden solle. Bald darauf wurde die Conference On DAta SYstems Languages (CODASYL) gegründet, welche, unterteilt in das eigentliche COBOL-Komitee und ein COBOL-Wartungs-Komitee, bis zum September 1959 eine Sprache definierte, welche den bis dahin bekannten Sprachübersetzungssystemen „FLOWMATIC", „AIMACO" und „Commercial Translator" überlegen war. Dieses Produkt wurde im April 1960 unter folgendem Titel veröffentlicht: „COBOL, A Report to the Conference on Data Systems Languages, including Initial Specifications for a Common Business Oriented Language (COBOL) for Programming Electronic Digital Computers." Die in diesem Bericht beschriebene Sprache wurde als „COBOL-60" bekannt.
2
Einführung
Die weiteren Stationen dieser fur kommerzielle Zwecke geeigneten Programmiersprache waren das vom COBOL-Wartungs-Komitee im Jahre 1961 herausgegebene COBOL-61 -Handbuch, welches wesentliche Verbesserungen gegenüber „COBOL-60" enthielt. Dasselbe Komitee veröffentlichte Mitte 1963 „COBOL-61-Extended", welches wiederum Erweiterungen und Änderungen gegenüber „COBOL-61" enthielt. Im Jahre 1964 wurde die 1959 gegründete Organisation CODASYL umstrukturiert und in die heutige, aus Abb. 1 ersichtliche Form gebracht. Zugleich wurde die bis 1974 geltende Version „COBOL-65 ' vorgestellt, welche als wesentlichste Änderung bzw. Erweiterung gegenüber „COBOL-61-Extended" das Verarbeiten von Großspeicherdateien enthielt.
Abb. 1:
Organisation „Conference On Data System Languages" CODASYL.
Für die weitere Entwicklung und Änderung von COBOL ist das COBOL-Komitee zuständig. Fragen und Vorschläge für solche weiteren Entwicklungen können dem CODASYL-Executive-Komitee zur Weiterleitung an das COBOL-Komitee unterbreitet werden. Etwa ab 1968 wurden Bemühungen angestrebt, eine verbindliche COBOL-Norm zu schaffen. Die an dieser Aufgabe beteiligten Institutionen waren: a) American Standards Association (ASA) b) American National Standard Institute (ANSI) c) European Computer Manufacturers Association (ECMA) d) International Organisation for Standards (ISO) Im Jahre 1974 führte diese Zusammenarbeit zur Veröffentlichung der in diesem Buch beschriebenen standardisierten COBOL-Fassung unter dem Namen „ANSCOBOL". (ANS = American National Standard)
Allgemeines über elektronische Datenverarbeitungsanlagen
3
Die Hersteller von COBOL-Ubersetzern haben sich seitdem im wesentlichen an diese Normen gehalten, so daß keine schwerwiegenden Unterschiede beim Testen eines ANS-COBOL-Programms auf unterschiedlichen EDV-Anlagen zu beachten sind. Die in diesem Buch gezeigten Anweisungen und Anwendungen haben darum für die verschiedensten, auf dem Markt befindlichen Anlagen Gültigkeit. Es ist jedoch ratsam, bei der Lösung eines Problems auf die von den einzelnen Herstellern herausgegebenen ANS-COBOL-Handbücher zurückzugreifen.
1.2. Allgemeines über elektronische Datenverarbeitungsanlagen Schon im Jahre 1833 entwickelte der Engländer Charles Babbage das Konzept einer Rechenanlage, bei welcher er die Grundeinheiten unserer heutigen modernen EDV-Anlagen (s. Abb. 2) festlegte. Seine Idee, diese Rechenanlage herzustellen, scheiterte jedoch an dem Stand der damaligen Technik. Erst in dön Jahren 1936 - 1941 gelang es dem Deutschen Konrad Zuse, eine EDV-Anlage zu entwickeln und zu bauen. In kurzen Zeitabständen danach entstanden von anderen Herstellern mehrere Rechenanlagen, die jedoch noch wenig leistungsfähig und vor allem sehr störungsanfällig waren. Die Auslieferung dieser Anlagen (der sogenannten „Ersten Generation") an private Benutzer erfolgte etwa ab 1950. Die „Zweite
Ausgabe (output)
Abb. 2:
Prinzipieller Aufbau einer Elektronischen Rechenanlage
4
Einführung
Generation" der EDV-Anlagen begann mit dem Jahr 1957 und hatte als grundlegende Änderung einen Schaltungsaufbau aus Transistoren (bei der 1. Generation waren es Elektronenröhren). Heute spricht man von der „Dritten Generation", welche etwa im Jahre 1964 begann und als wesentliches Merkmal einen Schaltungsaufbau aus integrierten Schaltkreisen (Monolith-Technik) aufweist. Im Prinzip besitzt jede Elektronische Rechenanlage den in Abb. 2 dargestellten Aufbau. Die aus Steuerwerk, Rechenwerk und Speicher bestehende Einheit heißt Zentraleinheit und liegt in jeder EDV-Anlage fest verdrahtet (hardwaremäßig) vor. Die Ein- und Ausgabegeräte sind der Zentraleinheit über spezielle Kanäle zugeordnet. 1 Ein mehr oder weniger großer Teil des Speichers wird dazu benutzt, ein in den meisten Fällen vom Hersteller bereitgestelltes Betriebssystem (Software-Paket) aufzunehmen. Nur der Rest der Speicherzellen steht dem Anwender (Programmierer) zur Lösung seiner Aufgaben und Probleme zur Verfügung. Man spricht bei Kapazitätsangaben eines Kernspeichers von n x K — Worten bzw. n x K — Bytes, 2 wobei mit K (= Kilo) in diesem Fall die Zahl 210 = 1024 gemeint ist (s. Abb. 3). Betriebssystem 10 KB Kernspeicher
freier
insgesamt
speicherplatz
128 K - B y t e s = 128-1024 = 131072
Kern-
< Bytes
Bytes
für Programmauf-
KB =
Kilo-Bytes
1 KB = 1024
Bytes
nahme 118 KB
Abb. 3:
1 2
Beispiel eines Kernspeicherausbaues
Dworatschek, S.: Grundlagen der Datenverarbeitung. 6. Aufl. Berlin/New York 1977. „n" entspricht einer ganzen Zahl
Allgemeines über elektronische Datenverarbeitungsanlagen
5
1.2.1. Informationsdarstellung
Die heutigen EDV-Anlagen unterscheiden sich in zwei Arten der internen Informationsabspeicherung: 1. Feste Wortlänge 2. Variable Wortlänge. Da der Speicher der Zentraleinheit aus Elementen besteht, die jeweils nur zwei Zustände annehmen können, z.B. magnetisch oder unmagnetisch, mußte man jede Information durch einen Code darstellen, welcher nur diese beiden Zustände benutzt. Man nennt solche Zeichen, welche nur zwei bestimmte Zustände annehmen können binär = zweiwertig. Zur Darstellung eines Binärzeichens werden die Zeichen 0 und 1 (bzw. 0 und L) verwendet, welche als Abkürzung 'bit'(aus engl. binary digit) genannt werden. Das bit ist also die kleinste Informationseinheit einer Elektronischen Rechenanlage. Da mit einem bit jeweils nur die Zustände 0 oder 1 dargestellt werden können, war es notwendig, einen Code zu schaffen, mit welchem durch gewisse Kombinationen mit weiteren bits diejenigen Zeichen dargestellt werden können, welche zur Verarbeitung in einer EDV-Anlage benötigt werden. Der am häufigsten angewendete Code ist der EBCDI-Code (Extended Binary Coded Decimal Interchange Code), welcher durch eine Kombination von 8 bit jeweils ein Zeichen (Charakter) verschlüsselt (Abb. 4). Diese Zeichen (jeweils 8 bit) können nach Bedarf variabel zusammengefaßt werden = variabler Wortlänge oder aber in einer maschinenabhängigen festen Wortlänge verarbeitet werden. Rechenanlagen mit variabler Wortlänge zeichnen sich normalerweise durch eine bessere Ausnutzung des Kernspeichers aus. Anlagen mit fester Wortlänge können dagegen eine höhere Verarbeitungsgeschwindigkeit erreichen. 1.2.2. Programmiersprachen
Die ursprüngliche, jeder EDV-Anlage zugeordnete Programmiersprache ist der Maschinen-Code, welcher die Information in der Form darstellt, wie die jeweilige Maschine ihn benötigt, um ein Programm direkt auszuführen. Da dieser Code jedoch für den normalen menschlichen Benutzer, bezogen auf eine Vielfalt von Anwenderaufgaben, unangemessen schwierig zu handhaben ist, wird von den Herstellern ein weiterer, benutzerfreundlicherer Code, der ASSEMBLER, geliefert. Dieser ASSEMBLER ist zum guten Teil nichts anderes als ein durch mnemotechnische Begriffe vereinfachter Maschinencode, der von der Maschine wiederum in den Interncode (= Maschinencode) umgesetzt wird, bevor die Abarbeitung ausgeführt werden kann. Da der ASSEMBLER aber immer noch stark abhängig von der EDV-Anlage ist,
Einführung
6
recht« Holbbyt« (Ziihrntail) H*xoul binar« 1 t 0 0000 i 0001 2 0010 3 0011 4 0100 5 0101 linket 6 0110 (Zon«n- 7 Olli t«il) 8 1000 9 1001 A 1010 t 1011 C 1100 0 1101 E 1110 F 1111
0
1 2 3 4 S 6 7 • 9 A • c D E F 00010010 0011 0100 0101 0110 Olli 1000 1001 1010 1011 1100 1101 1110 III!
»lanl
l -
0
1 /
a
(
*
)
+
%
•
A J
•
1
2
K
s
c
D E L M N T U V 5 1 4
F G H 0 P Q w X Y 6 7 S
und < angegeben werden. Beim Vergleich von numerischen Größen wird der algebraische Wert dieser Felder verglichen. Dabei ist die Anzahl der in der PICTURE-Klausel definierten Stellen unbedeutend. Anders ist dies beim Vergleich von nichtnumerischen Größen, bzw. beim gleichzeitigen Vergleich eines numerischen und eines nichtnumerischen Wertes. Bei gleicher Länge der Vergleichsoperanden werden die entsprechenden Bit-Positionen von links beginnend nach rechts verglichen. Es herrscht Ungleichheit, wenn ein zusammengehörendes Bit-Paar nicht gleichlautend ist. Dabei ist das Bit mit dem Inhalt „1" größer als dasjenige mit dem Inhalt „0". Wenn die beiden Operanden ungleiche Länge haben, erfolgt die Vergleichsoperation gleichfalls wie soeben beschrieben. Dabei wird jedoch vor dem Vergleich der kürzere Operand auf die Länge des anderen mit Leerzeichen (nach rechts!) aufgefüllt. Beispiele: IF WERT1 GREATER THAN WERT2 MOVE 100TOWERT1 ELSE MOVE 50 TO WERT1. IF A = B NEXT SENTENCE ELSE GO TO M1. MOVE "XY" TO FELD.
M1.
MOVE "AB" TO FELD.
67
Aufgabe 2
Votzeichentest Mit diesem Test kann festgestellt werden, ob der algebraische Wert einer numerischen Größe positiv (größer Null), negativ (kleiner Null) oder Null ist. Der Wert Null wird dabei weder als positiv noch negativ angesehen. Format:
£
{Datenname ) {arithm. Ausdruck}
IS
™
f POSTTIVE. | NEGATIVE > ZERO
THEN ...
Beispiele: 1.
IF WERT 1 IS POSITIVE GO TO RECHNUNG ELSE GO TO ENDE.
2.
IF X - Y IS ZERO GO TO FALL-0.
Fall-1.
Anweisungen
Fall-0.
Anweisungen
Im zweiten Beispiel ist der ELSE-Zweig fortgefallen. Das Programm verzweigt nur bei X-Y = 0 zu FALL-0, ansonsten immer zu FALL-1. Klassentest Durch den Klassentest kann festgestellt werden, ob eine Größe nur numerische Werte (0 bis 9) oder alphabetische Werte (A bis Z und Leerzeichen) enthält. Die zu testende Größe muß ein Datenelement sein, wobei dessen Datenklasse unbedeutend ist.
Programmierung in COBOL (sequentielle Verarbeitung)
68
Format: _IF Datenname
IS [NOT] I NUMERIC
1
THEN ...
1 ALPHABETIC I Beispiele: 1.
IF WERT1 IS NOT NUMERIC GO TO FEHLER ELSE NEXT SENTENCE.
2.
IF NAME ALPHABETIC MOVE NAME TO AUSGABE WRITE AUSGABE OTHERWISE GO TO LESEN.
Bedingungsnamentest Dieser Test greift auf die durch die Stufennummern 88 zugewiesenen Namen und Werte eines Datenelements zu (siehe Abschnitt 3.3.4). Dabei wird der Wert des Namens mit dem aktuellen Wert des Elements verglichen und dadurch der Ausgang des Tests festgelegt. Der Programmierer gibt in diesem Test nur die Bedingungsvariablennamen an. Format: IF [NOT] Bedingungsvariablenname THEN ... Beispiel: DATA DIVISION.
02 FARBE PICTURE 9. 88 ROT VALUE1. 88 BLAU VALUE 4. 88 GELB VALUE 6.
Aufgabe 2
69
PROCEDURE DIVISION
IF BLAU GO TO MARKE-BLAU.
Diese Anweisung würde dem Vergleichstest IF FARBE = 4 GO TO MARKE-BLAU entsprechen. Formularendetest Als weiterer spezieller Test kann die Abfrage auf Formularende (Ende einer Druckseite) verwendet werden. Hierzu ist jedoch vorher in der ENVIRONMENT DIVISION unter dem Paragraphen I-O-CONTROL die Angabe APPLY Formularendename TO FORM-OVERFLOW ON Ausgabe-Dateiname. zu machen. Format: IF [NOT] Formularendename
THEN ...
Formularende wird dabei durch die Steuerung des Druckers erkannt. Beispiel: I-O-CONTROL. APPLY BLATTENDE TO FORM-OVERFLOW ON LISTE.
PROCEDURE DIVISION.
70
Programmierung in COBOL (sequentielle Verarbeitung)
IF BLATTENDE GO TO NEU-SEITE. SCHREIBEN. WRITE ZEILE AFTER 1.
NEU-SEITE. WRITE ZEILE AFTER 0.
4.2.6. Zeilensteuerung
Wir hatten schon erwähnt, daß bei jedem neuen Aufruf des WRITE-Befehls automatisch eine neue Zeile begonnen wird. Wir haben jedoch die Möglichkeit, mehrere Zeilen freizulassen, indem wir hinter der Anweisung WRITE Satzname ... eine zusätzliche Angabe darüber machen. Dabei kann der Zeilenvorschub vor (AFTER) oder nach (BEFORE) dem Drucken vorgenommen werden. Format: WRITE Datensatzname
ADVANCING
Bei der Verwendung von Ganzzahl können folgende Angaben mit der nebenstehenden Bedeutung gemacht werden: 0 Seitenanfang 1 einzeiliger Vorschub (keine Leerzeile) 2 zweizeiliger Vorschub (eine Leerzeile) 3 dreizeiliger Vorschub (zwei Leerzeilen) Diese Steuerzeichen werden vom Betriebssystem in das erste Zeichen des auf dem Drucker auszugebenden Datensatzes eingetragen. Der Programmierer muß deshalb darauf achten, daß das erste Zeichen des Datensatzes freigehalten wird, da sonst die Information dieses ersten Bytes von der Drucksteuerung überschrieben wird.
71
Aufgabe 2
Die Angabe von Datenname erlaubt folgende Drucksteuerung: Leerstelle (blank) 0 +
1-9 A, B, C
einzeiliger Vorschub (keine Leerzeile) zweizeiliger Vorschub (eine Leerzeile) dreizeiliger Vorschub (zwei Leerzeilen) Vorschubunterdrückung (Druck wird auf derselben Zeile fortgesetzt) Kanalvorschub 1 - 9 Kanalvorschub 1 0 , 1 1 , 1 2
Das jeweils gültige Zeichen muß vor dem Ausdruck in Datenname übertragen werden. Dabei ist Datenname mit PICTURE X zu definieren. Auch bei dieser Anwendung muß der Ausgabebereich zur Aufnahme des Steuerbytes vorne um eine Stelle erweitert werden. Beispiele: WRITE
ZEILE AFTER 0. Ausdruck von ZEILE auf einer neuen Seite.
WRITE
ZEILE AFTER 2. Ausdruck mit einer Zeile
Zwischenraum.
WRITE
ZEILE BEFORE 2. Ausdruck von ZEILE, danach positioniert die Drucksteuerung auf den Anfang der übernächsten Druckzeile.
WRITE
ZEILE AFTER STEUERZEICHEN. Je nachdem, welches Zeichen in dem Datennamen Steuerzeichen enthalten ist, wird die entsprechende Drucksteuerung vorgenommen.
4.2.7. Programmierung der Aufgabe 2 Mit den neuen Kenntnissen in COBOL wollen wir uns nun der Programmierung der Aufgabe 2 zuwenden. In der IDENTIFICATION DIVISION hat sich außer dem Programmnamen nichts geändert. In der ENVIRONMENT DIVISION nehmen wir die Klausel für den Seitenvorschub auf (APPLY...). Die DATA DIVISION enthält die für die Druckaufbereitung im Ausgabesatz besprochenen Schablonen. In der PROCEDURE DIVISION wird die laut Flußdiagramm (Abb. 15) festgelegte Verarbeitung vorgenommen.
72
Programmierung in COBOL (sequentielle Verarbeitung)
Die in das Programm eingestreuten Kommata (außer bei der Druckaufbereitung) haben keinen Einfluß auf das Programm. Sie können ebenso wie das Semikolon überall dort gesetzt werden, wo es die Übersichtlichkeit des Textes fördert. Komma und Semikolon müssen jedoch ohne Zwischenraum hinter das letzte angegebene Zeichen eines Wortes gesetzt werden und immer von mindestens einem Zwischenraum gefolgt sein. Abb. 16: COBOL-Programm der Aufgabe 2 G 0 1 Ü 1 0 ID D I V I S I O N . 320 PROGRAM-ID. AUFG-2. UJ1J3J AUTHOR. H A K 3 E CK, K L A U S . *J10 Literal-1.BY Literal-2 { [UNTIL] FIRST)
Format 2:
EXAMINE Datenname
TALLYING
( all ) \ LEADING 1 Literal-1 UNTIL FIRST
[REPLACING BY Literal-2] Die Literale in dieser Anweisung dürfen nur aus einem einzigen Zeichen bestehen. Dabei ist ein nichtnumerisches Literal in Anführungszeichen zu setzen. Bei einem numerischen Literal müssen diese entfallen. Mit Ausnahme von ALL "Zeichen" können auch die in Abschnitt 4.2.2.1 besprochenen figurativen Konstanten gesetzt werden. Das Durchsuchen des Feldes geschieht immer von links nach rechts. REPLACING. Mit dieser Anwendung kann ein bestimmtes Zeichen in einem Feld durch ein anderes bestimmtes Zeichen ersetzt werden. Dabei gilt bei der
Weitere Cobol-Befehlswörter und deren Anwendung
95
Angabe von ALL, daß alle diese Zeichen ersetzt werden und LEADING besagt, es sollen nur die führenden Zeichen, welche mit Literal-1 übereinstimmen, ersetzt werden. Die Angabe von UNTIL FIRST besagt, es werden alle Zeichen bis zum ersten Auftreten von Literal-1 durch Literal-2 ersetzt. FIRST bedeutet, daß nur das erste Zeichen, welches mit Literal-1 übereinstimmt durch Literal-2 ersetzt wird. Beispiel:
EXAMINE FELD-1 REPLACING ALL "A" BY "B". FELD-1 (vorher) FELD-1 (nachher) A B A B A B A
B B B B B B B
EXAMINE FELD-2 REPLACING ALL 0 BY 1. FELD-2 (vorher) 0
i
FELD-2 (nachher)
1 0 2 0 3 4 5
EXAMINE FELD-3 REPLACING LEADING ZEROES BY SPACES. FELD-3 (vorher) FELD-3 (nachher) 0 0 0 1 2 3 4 u u u 1 2 3 4
EXAMINE FELD-4 REPLACING UNTIL FIRST 7 BY ZERO. FELD-4 (vorher) FELD-4 (nachher) 1 0 2 3 7 1 0 0 0 0 7 1
EXAMINE FELD-5 REPLACING FIRST 7 BY ZERO. FELD-5 (vorher) 1 0 7 3 7 1
FELD-5 (nachher) 1 0 0 3 7I 1
Programmierung in COBOL (sequentielle Verarbeitung)
96
TALLYING. Durch diese Anwendung wird gezählt, wie oft ein bestimmtes Zeichen in einem Datenfeld erscheint. Es kann zusätzlich durch die REPLACING-Angabe durch ein anderes Zeichen ersetzt werden. Das Ergebnis der Anweisung steht in Form einer ganzen Zahl in einem binären Datenfeld, welches automatisch durch den Compiler erzeugt wird und unter dem Namen TALLY angesprochen werden kann. Vor jeder Zähl-Operation wird der TALLY auf Null gesetzt, so daß in ihm immer nur der durch die Zählfunktion zustandegekommene Wert zur Verfügung steht. Beispiel: EXAMINE FELD-1 TALLYING ALL ' W . FELD-1 A B u
TALLY C u
01 0 10 j 01 5
D E F U U U
EXAMINE FELD-2 TALLYING LEADING ZEROES. FELD-2 0
0 0
TALLY 0
1 2 0
4 5
0 j 0 j0 j0 j 4
EXAMINE FELD-3 TALLYING UNTIL FIRST "X". FELD-3 A B C U
TALLY D E U F X 1 2
3
01 0 j 0 j 0 j 8
EXAMINE F E L D 4 TALLYING ALL " A " REPLACING BY "B". FELD-4
(vorher)
A B C A B C A B C A B
FELD-4
(nachher)
B B C B B C B B C B B
TALLY 0 !0 Ï0 !0 ;4
Weitere Cobol-Befehlswörter und deren Anwendung
97
4.4.6. NOTE-Befehlswort Format: NOTE Text. Mit dieser Anweisung kann in der PROCEDURE DIVISION ein beliebiger erklärender Text eingefügt werden, welcher keinen Einfluß auf den Programmablauf hat. Dabei müssen folgende Regeln beachtet werden: — NOTE muß das erste Wort eines Programmsatzes sein. Der Text wird bei dem ersten auftretenden Punkt mit folgendem Zwischenraum als beendet angesehen. — Wenn NOTE das erste Wort eines Paragraphen ist, wird der gesamte Paragraph als Text aufgefaßt. — Der Text erscheint in dem vom Compiler erzeugten Protokoll und hat keinen Einfluß auf den Programmablauf. Beispiele: 1. 2.
NOTE
HIER BEGINNT DIE VERARBEITUNG.
A-PARAGRAPH. NOTE DIE BERECHNUNG ERFOLGT DURCH DIE FORMEL: COMPUTE X = Y * Y + ( 3 - 8 * XI) * 3/5. B-PARAGRAPH. MOVE...
In dem letzten Beispiel wird der gesamte A-PARAGRAPH als Bemerkung aufgefaßt, d. h. auch die Anweisung COMPUTE... wird nicht vom Compiler übersetzt. Anmerkung: Besser und übersichtlicher ist es jedoch, erläuternde Texte mit '*' in Spalte 7 des COBOL-Formulars zu schreiben. 4.4.7. Fortsetzung von nichtnumerischen Literalen in einer Folgezeile
Ein nichtnumerisches Literal (siehe Abschnitt 2.2.2.e) darf bis zu 120 Zeichen enthalten, welche ja nicht in einer einzigen Lochkarte aufgenommen werden
Programmierung in COBOL (sequentielle Verarbeitung)
98
können. Es muß darum in einer bzw. mehreren Lochkarten fortgesetzt werden. Dies geschieht dadurch, daß das Literal beim Erreichen der 72. Spalte abgebrochen wird und in der Folgekarte durch Angabe eines Bindestrichs in Spalte 7 und einem folgenden Anführungszeichen fortgesetzt wird. Der Abschluß erfolgt normal, d. h. am Ende des Literais steht ein Anführungszeichen. Beispiel: COBOL-Ablochschema i2 1 00 i.
1L
I| Kennung e 6 s 9 io 1n? 11 1« 1i|l6 1? 16 19 20,71 72 ?J 2« 2S?|6 V 2!162S371018,11A12VIIbSiU M 357 b8 59 60.61 6? 61 6J 65166 67 6781 6749775017671V7?78 79 90 1 1 1 \ \ wn a IMAS.TM^.E. .S&T.IM 1 1 ; \ \l X.RALI W.IJiM .F.ff.RTf.£S£.T
1CQ. CO3160 CLOSE L I S T E STOP P U N . ÜC31bU T A B - V E R A K 9 E I I U N G . ÙJS19U MO Vt ELEMENT ( I N D - 1 ) TO I N H A L T ÙCÌ32C0 -RITE ZEILE. LÜ521U»»» PR.) GRAMMENDE
4.7. Übungsaufgaben (sequentielle Verarbeitung) In den folgenden zwei Übungsaufgaben soll der bisher beschriebene Stoff angewendet werden. Der Leser sollte eine eigene Lösung anstreben und die in Anhang A gezeigten Musterlösungen nur zu Überprüfungszwecken benutzen. Für jede Aufgabe ist zuerst, der entsprechende Programmablaufplan zu erstellen und danach die Programmierung vorzunehmen. 4.7.1. Übung 1 (Bestandsfortschreibung) In einem Fertigungsbetrieb werden pro Monat die auf einem Bestandsband aufgezeichneten Artikelsätze in der Form modifiziert, daß die dort jeweils angegebene Menge durch Zugänge bzw. Abgänge berichtigt wird. Diese Informationen werden durch Veränderungskarten eingegeben. Alle Sätze werden auf ein neues Bestandsband übernommen. Neuzugänge sind nicht vorgesehen. Zur Überprüfung wird eine Liste aller Artikelsätze ausgegeben.
Übungsaufgaben (sequentielle Verarbeitung)
117
Eingabe: 1. Altes Bestandsband Stelle 1 bis 2 Satzart Stelle 3 bis 7 Artikelnummer Stelle 8 bis 22 Artikelbezeichnung Stelle 23 bis 27 Menge Stelle 28 bis 32 Einzelpreis Sortierung nach aufsteigenden Artikelnummern, Blockungsfaktor 20. 2. Veränderungskarten Spalte 1 bis 2 Spalte 3 bis 7 Spalte 8 bis 12 Spalte 13 Spalte 14 bis 80
Kartenart Artikelnummer Menge 1 = Zugang 2 = Abgang frei
Die Veränderungskarten sind ebenfalls nach aufsteigenden Artikelnummern sortiert. Es sind jedoch pro Artikelnummer mehrere Bewegungen möglich.
118
Programmierung in COBOL (sequentielle Verarbeitung)
Ausgabe: 1. Neues Bestandsband Aufteilung, Sortierung und Blockung wie bei Eingabeband. 2. Liste £
1 i hl2ßW156 71 9 0 i 2 3 4 5 Kn T f.H r uu Lp p ~~1 mm WSJM
1i
mm HTfflFA 1 1 1 11 J] j Ji
J —
p
1
1
P
15 7 • E l ¡34 5 6 8 0 2 2 3 4 h ä Tg £ l l L l l 0i 3 t S L. l t XXXi X { x KXx i X ri J S? rXX s X_ _ _ _ _ _ _ _ _XX _ _ _ _- _ ? ? * Xr XX_ _ „ _ _ _ _ _ _ _ t K
§
j
j
1§L I¥ 0 6 1 8 9 0 3 4 5 6J 8 9Ö 2 3 4 5 6 7 8 9 0 EU£E Si L * I * I | pl Z g l 24 it1 i 1 W, 11 J LI n Jn
l 50 4$ ll 2
|
P
P
Jn
i 1 —
Auf jeder neuen Seite ist die Überschrift neu auszugeben.
4.7.2. Übung 2 (Lohnsteuerberechnung)
Ein Betrieb möchte zur Berechnung des vorläufigen Lohnsteuerausgleiches für seine Arbeitnehmer ein Programm erstellen, welches diese Berechnung vornimmt. Als Eingabe dienen Lohnkarten (Kartenart 2), auf welchen je Arbeitnehmer die Personalnummer, Steuerklasse, Kinderzahl und der bereits um den in der Lohnsteuerkarte eventuell eingetragenen Freibetrag gekürzte Jahreslohn vermerkt ist. Durch Vorlaufkarten (Kartenart 1) ist eine Tabelle herzustellen, aus welcher der pro Arbeitnehmer einzusetzende Freibetrag entnommen werden kann. Auszugeben ist eine Liste, die pro Personalnummer jeweils Steuerklasse, Kinderzahl und Lohnsteuer enthält. Eingabe: 1. Vorlaufkarten für Freibetragstabelle (6 Steuerklassen und bis 9 Kinder, d. h. 60 Karten!)
Übungsaufgaben (sequentielle Verarbeitung)
Spalte Spalte Spalte Spalte Spalte
1 bis 5 6 7 8 bis 79 80
119
Freibetrag in vollen DM Steuerklasse 1...6 Kinderzahl 0...9 frei Kartenart (hier 1)
Freibetragstabelle Kinde r Klasse
I II III IV V VI
0 1 740 2 580 1 740 60 - 1 620 - 3 360
1
2
3
4 140 2 940 660
5 820 4 620 1 500 -
2. Lohnkarten 1 bis 5 6 7 8 bis 15 16 bis 79 80
_
_
7 620 6 420 2 400
9 420 8 220 3 300
11 220 10 0 2 0 4 200
1 800 1 800 900
-
-
-
-
-
-
-
Negative Salden sind Hinzurechnungen
Spalte Spalte Spalte Spalte Spalte Spalte
5
m
-
Personalnummer Steuerklasse Kinderzahl Jahreslohn frei Kartenart (hier 2)
f. jedes weitere
4
120
Programmierung in COBOL (sequentielle Verarbeitung)
Liste Ausgabe:
PERS. -NR.
KL.
Ki.
12345 12346 1 2 3 47 12348 1 2 3 49 12350 12351 1 2 3 52 12353 12354 12355 12356 123 57
1 2 3 4 5 6 5 4 3 2 1 2 3
C 1 2
JAHRESLOHN
3
0 C
0 5
6 7 C 8 9
3 12 6 C 150 200 250 180 140 6C 21 1 22 57
440. 100. OCO. 000. 000.
cco.
000. 000. 000. 350. SCO. 000. 000.
LOHNST. 00 00 00 00 00 00 00 00 00 00 00 00 00
0 1 191 14 310 5 6 92 0 89 082 11 6 9 6 76 380 51 0 3 0 111 786 917
0 8
701 570
Die Verarbeitung ist wie folgt vorzunehmen: 1. Jahreslohn in Einkommensbetrag umrechnen, d. h. Einkommensbetrag = Jahreslohn - Tabellenfreibetrag. 2. Einkommensbetrag in den Steuerklassen III, IV, V und VI halbieren (splittern!) und auf volle DM nach unten abrunden. 3. Einkommensbeträge bis einschließlich DM 4 8 . 0 0 0 . - auf volle DM 3 0 . - , höhere Beträge auf volle DM 60.— nach unten abrunden. Dieser abgerundete Betrag geht als X in die nachstehenden Berechnungsformeln ein. EST ist die gesuchte Lohnsteuer, welche jedoch in den Steuerklassen III, IV, V und VI (Splitting) wieder verdoppelt werden muß. a) b) c)
X < 1 710 < X < 8 010 < X
2 004040 COMPUTE VOLL-DM-BETRAG 1 EINKOMMEN / 2 ELSE 004050 COMPUTE VOLL-DM-BETRAG * EINKOMMEN. 004060 IF V O L L - D M - B E T R A G NOT > 4 8 C 0 0 PERFORM RUNDEN-1 J04070 ELSE PERFORM RUNDEN-2. 004090 IF X < 1 7 1 0 G O TO F 1 R * E L - 1 . 004100 IF X < 8 0 1 3 GO TO F O R M E L - 2 . 004110 GO TO F 0 R M E L - 3 . IF X < 3 0 0 0 C 004120 60 T O F O R M E L - 4 . IF X < 7 8 0 0 C 004130 IF X < 1 1 0 0 4 0 GO TO F O R M E L - 5 . 004140 GO TO F 0 R M E L - 4 • 00*160 004190 RUNDEN - 1 . COMPUTE = VOLL-DM-BETRAG / 3C. 0u4200 COMPUTE » X * 3D. OJ4220 004230 RUNDEN-2. COMPUTE VOLL-DM-BETRAG / 60.
Anhang A
uU»240 UÜ5010 Ju5020 0C5J30 Uu5040 GÜSÜSJ 0U5060 JU5073 J0508J Ju5J9d I/Ü510Ü ÜÜ5110 005120 OJ5130 Ü05UJ LJ515U Uü5160 o05170 C05180 C35190 J052ÜÜ üu522J JC5230 005240 00601U
147
CJHPUTE X = X * FORHEL-1. CONPUTE Ei T = C GO TO AUSGABE« FOÄMEL-2. 319.20. C0HPUTE EST = 0.19 • X GO TO AUSGABE. FORNEL-3. CONPUTE i » (X - 8000» / 1000. COHPUTE EST » -n.J86 * r •» 3 • 7.764 « Y •» 2 • 1«C • Y • 12J1• GO TO AUSGABE. FORNEL-4. C01PUT E Y * (X - 3C00Ü) / 1LJQ. COHPUT E EST = -U.J12 » Y •• 3 • 1.82 • Y •* 2 • 437 » Y • 9223. GO TO AUSGABE. FORNEL-5. CONPUTE Y = (X - 24001) / 1L0J. COHPUTE EST * -0.306 • Y 3 • 1.572 • Y •• 2 • 382 • Y • 6358. GO TO AUSGABE. FOKBEL-s. COHPUTE EST = 0.53 » X - 11281. GO TO AUSGABE. AUSGA3E.
Ü0602Ü IF KLASSE > 2 COWUTE EST = EST • 2. ¿06030 HOVt EST TO ST EUERBETR«G. LÜ6043 rfRlTE ZEILE GO TOtfE RA R9EI TUNG . OÜ6060 ENDE. CLOSE KARTE, LISTE; STOP RUN. 106100* 00611J"* FMBt UEBUNG2 *•»
Lösung zu Übung 3 CC101U ID DIVlSluN. :uiJ2o PK Qù RA d-1D. U EuUNG 3 • J 01u3J RtlAkKS. AEMlERUNGSDIENST ( 1 NDc X - ;> E 3UEN T I ELL VERAKfctlTUNG). E CL-1 05 J ENVIRONMENT DIVISION. tylu6u INPUT-OUTPUT SECTION. •j U1 0 7-JFILE-CONTROL. L j 1 j 80 ScLc CT AtwDERUNG ASSIGN TO UR-RE ADER-S-SYS310. SELcCT BESTAND ASSIGN TO D A-D I à C-I-S Y S t! 1 1 Cw109J ACCEiS IS R A N H 0 * Ji.1 11J RESERVE NO 12J R t CORD KEY IS KUND-NR L«11 J'j SYN-JULIC KEY IS SUCHARG. 001140 1.JII0U DATA DIVISION. IfcO FILE SECTIOM. i.01 2L J FD AENDtRUNG, RECORDING F, LAdEL RECORD TWITTED, Vj1 210 DATA R t C 0 R D E-KHPTF. lùI22J J1 E-KARTE. - >11 2 30 Ci t-KART-ART PICTURE 9. Olii 24ü •J a E-KUND-Nrt PITTURE 9(5). CÓ1250 lÙ E-ANSCriRIFT PICTURE X ( 53 ) . u 0 i U1 JFD ¡(ESTAND, RECORCIN F, LABEL RECORD 3T»NDARD, 3LUCK 5 RtCOrtDS, DATA FiCORD B E S r A ND-S AT Z . n.r ¿020 i . 2 0 4 U01 "'Ì ¿STAND—SATZ. L J 2 u 5 J U2 KENNZ EI CHEN PICTURE X. 1 . ¿„6„ 'M KUND-NR PICTURE 9(5). D •j ii2U7j 02 ANSCHRIFT IC TURE X(50)• i ; ¿06J 02 LEtK PICTURE XU4).
148
Anhang A
0021üO rfORKING-STOKAGE SECTION. C02120 77 SUCHARG PIC 9(5). 002141} PROCEDURE D I V I S I O N . C0215Ü ANFANG® 0Ü216G OPEN INPUT AENDF»UNG. &CZ\7i> OPEN 1-0 B E S TA Nl> . 0«121B0 LESE.'). ÙC2190 READ AENUfRUNG AT END CLOSE AENDERUNli BESTAND STOP RUN, 00221)0 MJVE E-KUND-NR TO SUCHARG. ÜÜ2210 I F E-KART-APT = 5 GO TO NEUZUGANG. 4ÌI222U READ «ESTAND INVALID