EMZETT.
Login

Kurz: Jede Variable hat eine Stufennummer (01 bis 49), einen Namen und mit PIC eine Beschreibung ihres Formats. Zusammengehörige Felder bilden eine Gruppe (Struktur).

Teil des Kurses COBOL

Kapitel 2 von 8 im Kurs COBOL. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Variablen und Stufennummern

Jede Variable hat eine Stufennummer (01 bis 49), einen Namen und mit PIC eine Beschreibung ihres Formats. Zusammengehörige Felder bilden eine Gruppe (Struktur).

Symbol in PICBedeutung
9eine Ziffer
Xbeliebiges Zeichen
ABuchstabe
SVorzeichen (vor allen 9)
Vimpliziter Dezimalpunkt (belegt keinen Platz)
ZZiffer, führende Null als Leerzeichen
. , $ - CR DBEditierzeichen für die Ausgabe
(n)Wiederholung: 9(5) = 99999
IDENTIFICATION DIVISION.
PROGRAM-ID. DATEN.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ZAHL        PIC 9(5)     VALUE 42.
01 PREIS       PIC 9(4)V99  VALUE 1234.56.
01 SALDO       PIC S9(5)V99 VALUE -75.25.
01 NAME        PIC X(10)    VALUE "Fortran".
01 BUCHSTABEN  PIC A(5)     VALUE "Hallo".
01 AUSGABE-1   PIC Z(4)9.
01 AUSGABE-2   PIC ZZZ,ZZ9.99.
01 AUSGABE-3   PIC -9(4).99.
01 AUSGABE-4   PIC $$$9.99.
 
01 PERSON.
   05 P-NAME   PIC X(8)  VALUE "Mia".
   05 P-ALTER  PIC 99    VALUE 17.
   05 P-ORT    PIC X(10) VALUE "Berlin".
 
PROCEDURE DIVISION.
    DISPLAY "ZAHL      : [" ZAHL "]".
    DISPLAY "PREIS     : [" PREIS "]".
    DISPLAY "SALDO     : [" SALDO "]".
    DISPLAY "NAME      : [" NAME "]".
    MOVE ZAHL TO AUSGABE-1.
    DISPLAY "Z-Format  : [" AUSGABE-1 "]".
    MOVE PREIS TO AUSGABE-2.
    DISPLAY "Tausender : [" AUSGABE-2 "]".
    MOVE SALDO TO AUSGABE-3.
    DISPLAY "Vorzeichen: [" AUSGABE-3 "]".
    MOVE 7.5 TO AUSGABE-4.
    DISPLAY "Währung   : [" AUSGABE-4 "]".
    DISPLAY "Gruppe    : [" PERSON "]".
    DISPLAY "Teilfeld  : " P-NAME " / " P-ORT.
    STOP RUN.

Ausgabe:

ZAHL      : [00042]
PREIS     : [1234.56]
SALDO     : [-00075.25]
NAME      : [Fortran   ]
Z-Format  : [   42]
Tausender : [  1,234.56]
Vorzeichen: [-0075.25]
Währung   : [  $7.50]
Gruppe    : [Mia     17Berlin    ]
Teilfeld  : Mia      / Berlin

Hinweis

GnuCOBOL zeigt bei DISPLAY den Dezimalpunkt und das Vorzeichen an; ein IBM-Mainframe gibt je nach Compiler nur die Ziffern aus. Für eine feste Darstellung nutzt man Editierfelder (MOVE ... TO AUSGABE-2).

Intern speichert COBOL Zahlen als Dezimalziffern – so entstehen keine Gleitkomma-Rundungsfehler wie 0.1 + 0.2 != 0.3. PIC 9(4)V99 ist eine Zahl mit vier Vor- und zwei Nachkommastellen, die du ohne Rundungsfehler addieren kannst.

MOVE: Daten zuweisen

MOVE kopiert Werte und passt sie dabei an das Zielformat an:

IDENTIFICATION DIVISION.
PROGRAM-ID. MOVES.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 GROSS   PIC 9(5)V99 VALUE 12345.67.
01 KLEIN   PIC 9(3)V9.
01 TEXT-1  PIC X(5).
01 TEXT-2  PIC X(12) VALUE "Hallo Welt".
01 ZIFFERN PIC 9(3).
01 LEER    PIC X(6) VALUE SPACES.
01 NULLEN  PIC 9(4) VALUE ZERO.
 
PROCEDURE DIVISION.
    MOVE GROSS TO KLEIN.
    DISPLAY "abgeschnitten: " KLEIN.
    MOVE TEXT-2 TO TEXT-1.
    DISPLAY "Text gekürzt : [" TEXT-1 "]".
    MOVE "AB" TO TEXT-1.
    DISPLAY "aufgefüllt   : [" TEXT-1 "]".
    MOVE 7 TO ZIFFERN.
    DISPLAY "Ziffern      : " ZIFFERN.
    MOVE ALL "-" TO TEXT-2.
    DISPLAY "ALL          : " TEXT-2.
    DISPLAY "SPACES [" LEER "] ZERO " NULLEN.
    MOVE HIGH-VALUES TO LEER.
    MOVE LOW-VALUES TO LEER.
    STOP RUN.

Ausgabe:

abgeschnitten: 345.6
Text gekürzt : [Hallo]
aufgefüllt   : [AB   ]
Ziffern      : 007
ALL          : ------------
SPACES [      ] ZERO 0000

Achtung

MOVE schneidet zu lange Zahlen links ab (hohe Stellen gehen verloren) und Texte rechts. Das ist eine klassische Fehlerquelle: Größe von PIC sorgfältig planen.

Konstanten, Stufe 88, REDEFINES

IDENTIFICATION DIVISION.
PROGRAM-ID. STUFEN.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STATUS-CODE PIC 9 VALUE 2.
   88 OFFEN      VALUE 1.
   88 AKTIV      VALUE 2.
   88 GESCHLOSSEN VALUE 3 4.
01 DATUM       PIC 9(8) VALUE 20250315.
01 DATUM-TEILE REDEFINES DATUM.
   05 JAHR     PIC 9(4).
   05 MONAT    PIC 99.
   05 TAG      PIC 99.
78 PI-WERT      VALUE 3.14159.
 
PROCEDURE DIVISION.
    IF AKTIV
        DISPLAY "Status ist aktiv"
    END-IF.
    SET GESCHLOSSEN TO TRUE.
    DISPLAY "Status jetzt: " STATUS-CODE.
    DISPLAY JAHR "-" MONAT "-" TAG.
    DISPLAY PI-WERT.
    STOP RUN.

Ausgabe:

Status ist aktiv
Status jetzt: 3
2025-03-15
3.14159
  • Stufe 88 definiert Bedingungsnamen: IF AKTIV statt IF STATUS-CODE = 2
  • REDEFINES legt mehrere Sichten auf denselben Speicher
  • 78 (GnuCOBOL) definiert Konstanten

Merke

  • PIC 9 Ziffer, X Zeichen, A Buchstabe, S Vorzeichen, V Dezimalpunkt
  • Editierzeichen (Z, ,, ., $, -) formatieren die Ausgabe
  • Gruppen mit Stufennummern (01, 05); MOVE passt Formate an und kürzt
  • Stufe 88 für Bedingungsnamen, REDEFINES für zweite Sicht auf Daten
  • Dezimalarithmetik statt Gleitkomma: perfekt für Geld

Übungsaufgabe

Lege ein Feld für einen Preis mit Cent an und gib ihn mit Tausenderpunkt und Eurozeichen formatiert aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Einführung und erstes Programm

Weiter: Rechnen in COBOL

Alle Kapitel: COBOL im Überblick