Difference between revisions of "Cobol home"

Ms (talk)
(Zeichenklassen: nur Sonderzeichen)
 
(10 intermediate revisions by 2 users not shown)
Zeile 10: Zeile 10:
   
 
Beispiele (für "123456"):
 
Beispiele (für "123456"):
*x'0123456F' (BS2000)
+
*x'0123456F'
   
 
*[http://www.discinterchange.com/TechTalk_Packed_fields_.html]
 
*[http://www.discinterchange.com/TechTalk_Packed_fields_.html]
 
*[http://www.discinterchange.com/TechTalk_COBOL_comp_.html]
 
*[http://www.discinterchange.com/TechTalk_COBOL_comp_.html]
  +
  +
===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:
  +
<pre>
  +
01 CHANGE-INDICATOR PIC X(02).
  +
01 CHANGE-INDICATOR-RDF REDEFINES CHANGE-INDICATOR.
  +
05 CHANGE-INDICATOR-B PIC S9(04) COMP.
  +
</pre>
  +
  +
Gültige Längen sind 2, 4 oder 8 Bytes.
  +
  +
===Links===
  +
*[http://www.discinterchange.com/TechTalk_signed_fields_.html EBCDIC to ASCII Conversion of Signed Fields]
  +
  +
==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.
  +
  +
<pre>
  +
10 ARRAY.
  +
15 ARRAY-ELEMENT PIC X(03) OCCURS 4.
  +
</pre>
  +
  +
und nicht
  +
  +
<pre>
  +
10 STRUCT.
  +
15 FIELD PIC X(10)
  +
15 ARRAY-ELEMENT PIC X(03) OCCURS 4.
  +
</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".
  +
* 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.
  +
</pre>
  +
  +
liefert
  +
  +
<pre>
  +
MSTEST (1)
  +
ABC-DEF
  +
MSTEST (ZEICH-STRING)
  +
MSTEST (NOT ZEICH-SONDER)
  +
</pre>
  +
  +
<pre>
  +
MSTEST (1)
  +
-()+
  +
MSTEST (ZEICH-STRING)
  +
MSTEST (ZEICH-SONDER)
  +
MSTEST (NOT ZEICH-STRING) OR (ZEICH-SONDER)
  +
</pre>
   
 
==Links==
 
==Links==

Latest revision as of 14:36, 12 April 2010

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