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 / Berlin
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
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
Aufgabe
Lege ein Feld für einen Preis mit Cent an und gib ihn mit Tausenderpunkt und Eurozeichen formatiert aus.