Cobol home
Inhaltsverzeichnis
Data Types
COMP-3
Gepackte Zahlendarstellung, jede Stelle wird in einem Halbbyte abgelegt. Die letzte Stelle enthält das Vorzeichen:
- "C": positive
- "D": negative
- "F": unsigned
Platzbedarf für n Stellen:
- (n/2 + 1) falls n gerade
Beispiele (für "123456"):
- x'0123456F'
9(n)
Bei vorzeichenlosen Zahlen, die nicht gepackt abgelegt sind, werden die einzelnen Stellen als normale EBCDIC Zeichen abgelegt.
Beispiele
- 12345 -> F1F2F3F4F5
S9(n)
Bei vorzeichenbehafteten Zahlen, die nicht gepackt abgelegt sind, werden die einzelnen Stellen als normale EBCDIC Zeichen abgelegt (F0 bis F9), nur für die letzte (niederwertigste) Stelle erfolgt eine Oder-Verknüpfung mit dem Vorzeichen.
Beispiele
- +12345 -> F1F2F3F4C5
- -12345 -> F1F2F3F4D5
COMP
COMP, COMP-5 und BINARY sind identisch. Abgelegt wird die Zahl im Hex-Format
01 CHANGE-INDICATOR PIC X(02). 01 CHANGE-INDICATOR-RDF REDEFINES CHANGE-INDICATOR. 05 CHANGE-INDICATOR-B PIC S9(04) COMP.
Links
Coding Style
Array sollten immer in einem gemeinsamen Strukturelement abgelegt werden und nicht mit anderen Feldern gemischt werden. Nur so lässt sich das ganze Array mit einem Initialize leeren, ohne jedes einzelne Feldelement leeren zu müssen. Dann braucht man auch beim Ändern der Arraygröße nicht an diese Initializes zu denken.
10 ARRAY. 15 ARRAY-ELEMENT PIC X(03) OCCURS 4.
und nicht
10 STRUCT. 15 FIELD PIC X(10) 15 ARRAY-ELEMENT PIC X(03) OCCURS 4.
Zeichenklassen
Mit Zeichenklassen lassen sich in aktuellem COBOL Wertebereiche von Strings prüfen. Aber Achtung: COBOL prüft, ob der Inhalt der _gesamten_ Variable der Klasse entspricht.
IDENTIFICATION DIVISION. PROGRAM-ID. MSTEST. * ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. BS2000. * SPECIAL-NAMES. CLASS ZEICH-STRING IS "A" THRU "I" "-" "'" "." "J" THRU "R" "S" THRU "Z" "0" THRU "9" "(" ")" SPACE "+" "/" "," * CLASS ZEICH-SONDER IS "(" ")" "-" "." "'" "/" "," "+" SPACE * . DATA DIVISION. WORKING-STORAGE SECTION. 01 FILLER. 05 TEST-STRING PIC X(70) VALUE "ABC-DEF". * PROCEDURE DIVISION. * MAIN. DISPLAY "MSTEST (1)" DISPLAY TEST-STRING IF ( TEST-STRING IS NOT ZEICH-STRING ) THEN DISPLAY "MSTEST (NOT ZEICH-STRING)" END-IF IF ( TEST-STRING IS ZEICH-STRING ) THEN DISPLAY "MSTEST (ZEICH-STRING)" END-IF IF ( TEST-STRING IS ZEICH-SONDER ) THEN DISPLAY "MSTEST (ZEICH-SONDER)" END-IF IF ( TEST-STRING IS NOT ZEICH-SONDER ) THEN DISPLAY "MSTEST (NOT ZEICH-SONDER)" END-IF IF ( TEST-STRING IS NOT ZEICH-STRING ) OR ( TEST-STRING IS ZEICH-SONDER ) THEN DISPLAY "MSTEST (NOT ZEICH-STRING) OR (ZEICH-SONDER)" END-IF . * MAIN-EXIT. STOP RUN.
liefert
MSTEST (1) ABC-DEF MSTEST (ZEICH-STRING) MSTEST (NOT ZEICH-SONDER)