Difference between revisions of "Cobol home"
(→Zeichenklassen: nur Sonderzeichen) |
|||
(9 intermediate revisions by 2 users not shown) | |||
Zeile 32: | Zeile 32: | ||
*-12345 -> F1F2F3F4D5 |
*-12345 -> F1F2F3F4D5 |
||
+ | ===COMP=== |
||
− | *[http://www.discinterchange.com/TechTalk_signed_fields_.html] |
||
+ | |||
+ | 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
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 (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)