Cobol home

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 (mindestens unter BS2000) identisch. Abgelegt wird die Zahl im Hex-Format

Beispiel für einen Redefine:

01 CHANGE-INDICATOR          PIC X(02).
01 CHANGE-INDICATOR-RDF REDEFINES CHANGE-INDICATOR.
   05 CHANGE-INDICATOR-B       PIC S9(04) COMP.

Gültige Längen sind 2, 4 oder 8 Bytes.

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".
      *    05 TEST-STRING           PIC X(70) VALUE "-()+".
      *
       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)
MSTEST (1)
-()+                                         
MSTEST (ZEICH-STRING)
MSTEST (ZEICH-SONDER)
MSTEST (NOT ZEICH-STRING) OR (ZEICH-SONDER)

Links