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
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 PIC | Bedeutung |
|---|---|
9 | eine Ziffer |
X | beliebiges Zeichen |
A | Buchstabe |
S | Vorzeichen (vor allen 9) |
V | impliziter Dezimalpunkt (belegt keinen Platz) |
Z | Ziffer, führende Null als Leerzeichen |
. , $ - CR DB | Editierzeichen 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 / BerlinHinweis
GnuCOBOL zeigt bei
DISPLAYden 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 0000Achtung
MOVEschneidet zu lange Zahlen links ab (hohe Stellen gehen verloren) und Texte rechts. Das ist eine klassische Fehlerquelle: Größe vonPICsorgfä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 AKTIVstattIF STATUS-CODE = 2 REDEFINESlegt mehrere Sichten auf denselben Speicher78(GnuCOBOL) definiert Konstanten
Merke
PIC 9Ziffer,XZeichen,ABuchstabe,SVorzeichen,VDezimalpunkt- Editierzeichen (
Z,,,.,$,-) formatieren die Ausgabe - Gruppen mit Stufennummern (
01,05);MOVEpasst Formate an und kürzt - Stufe 88 für Bedingungsnamen,
REDEFINESfü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
Was bedeutet PIC 9(4)V99?
- Vier Vorkommastellen und zwei Nachkommastellen (richtig)
- Sechs Vorkommastellen
- Vier Buchstaben
- Eine Datei
Was bewirkt ein MOVE in ein zu kleines numerisches Feld?
- Die höchstwertigen Stellen gehen verloren (richtig)
- Es gibt einen Fehler
- Die Zahl wird gerundet
- Nichts
Wofür ist die Stufe 88?
- Für Bedingungsnamen (richtig)
- Für Konstanten
- Für Gruppen
- Für Dateien
Weiter im Kurs
Zurück: Einführung und erstes Programm
Weiter: Rechnen in COBOL
Alle Kapitel: COBOL im Überblick