Difference between revisions of "Cobol home"

(Links)
Ms (talk)
Zeile 55: Zeile 55:
 
15 ARRAY-ELEMENT PIC X(03) OCCURS 4.
 
15 ARRAY-ELEMENT PIC X(03) OCCURS 4.
 
</pre>
 
</pre>
  +
  +
==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.
  +
  +
<pre>
  +
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.
  +
</pre>
  +
  +
liefert
  +
  +
<pre>
  +
MSTEST (1)
  +
ABC-DEF
  +
MSTEST (ZEICH-STRING)
  +
MSTEST (NOT ZEICH-SONDER)
  +
</pre>
  +
   
 
==Links==
 
==Links==

Version vom 13:52, 21 Oktober 2008

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

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)


Links