COBOL trennt Identifikation, Datenbeschreibung und Ablauf. PIC beschreibt das Datenformat; DISPLAY erzeugt Ausgabe, STOP RUN beendet das Programm.
COBOL trennt Identifikation, Datenbeschreibung und Ablauf. PIC beschreibt das Datenformat; DISPLAY erzeugt Ausgabe, STOP RUN beendet das Programm. Grafik in voller Größe öffnen

COBOL: Beispiele und Erklärung

Reifegrad und Grenzen: experimentell

Umgesetzter Umfang: Numerische Verarbeitung, CALL/LINKAGE, sequenzielle Dateien sowie ausgewählte JSON/XML-, Speicherverwaltungs- und NATIONAL-Funktionen sind gezeigt.

Grenzen: Kein vollständiges ISO-COBOL: SQL/CICS/MQ fehlen, dynamische CALL-Ziele sind nur modulbekannt und JSON/XML-Formen bleiben begrenzt.

Zur PBXB64-V9-Übersicht English

COBOL unterstützte Befehle und Umfang

Die sprachspezifische Referenz der unterstützten Befehle und des Umfangs mit durchsuchbaren Kategorien und klaren Grenzen öffnen.

Umfangsreferenz öffnen

COBOL trennt Identifikation, Datenbeschreibung und Ablauf. PIC beschreibt das Datenformat; DISPLAY erzeugt Ausgabe, STOP RUN beendet das Programm.

Zwölf Kurzbeispiele und ein größeres Programm. Wählen Sie ein Thema oder arbeiten Sie die Beispiele der Reihe nach durch.

1. 1 + 2 + 3 + 4 + 5 = 15

Die Zahlen 1 bis 5 werden zu 15 addiert. Das Programm gibt 15 aus und endet mit Exitcode 0.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. QuickSum.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 TOTAL PIC 9(2).
       PROCEDURE DIVISION.
           COMPUTE TOTAL = 1 + 2 + 3 + 4 + 5
           DISPLAY TOTAL
           STOP RUN.

Erwarteter Exitcode: 0; Ausgabe-Prüfmuster (Regex): '15'

PBXB64.exe sum15-cobol.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Nativ geprüft mit dem V22-Kandidaten vom 30.09.2026; Prüfung mit dem finalen Compiler noch ausstehend.

2. DISPLAY und STOP RUN

PROGRAM-ID benennt das Programm. In der PROCEDURE DIVISION schreibt DISPLAY Hello from COBOL auf die Konsole. STOP RUN beendet; der erwartete Exitcode ist 0.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. hello.
       PROCEDURE DIVISION.
           DISPLAY "Hello from COBOL".
           STOP RUN.

Erwarteter Exitcode: 0; Ausgabe-Prüfmuster (Regex): 'Hello from COBOL\n'

PBXB64.exe test_hello.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Kanonischer Testfall mit erwartetem Ergebnis; hier keine neue native V22-Prüfung. Finale Ausführung noch ausstehend.

3. Ein langes Dezimalliteral ausgeben

DISPLAY verwendet hier ein Literal mit 19 Nachkommastellen. Der Testvertrag erwartet 1.1234567890123456789. Das ist ein gezielter Genauigkeitsfall; seine finale Prüfung bleibt an den endgültigen Compiler gebunden.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DECIMAL-WIDE-DISPLAY.
       PROCEDURE DIVISION.
           DISPLAY 1.1234567890123456789.
           STOP RUN.

Erwarteter Exitcode: 0; Ausgabe-Prüfmuster (Regex): '1\\.1234567890123456789\\n'

PBXB64.exe regress_decimal_literal_wide_display.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Kanonischer Testfall mit erwartetem Ergebnis; hier keine neue native V22-Prüfung. Finale Ausführung noch ausstehend.

4. COMPUTE und ein Dezimalfeld

Ablauf Schritt für Schritt

  1. A ist 10 und B ist 3; die Klammer bildet zunächst 13.
  2. (13 × 2) - (5 / 5) ergibt 25.
  3. PIC 9(2)V99 legt zwei Nachkommastellen fest; DISPLAY zeigt im Test 25.00.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. ComputeTest.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9(4) VALUE 10.
       01 B PIC 9(4) VALUE 3.
       01 C PIC 9(2)V99.
       PROCEDURE DIVISION.
           COMPUTE C = (A + B) * 2 - 5 / 5
           DISPLAY C
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
25.00
PBXB64.exe cobol-test_compute.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

5. DIVIDE INTO GIVING: Reihenfolge beachten

Ablauf Schritt für Schritt

  1. A enthält 0.5 und B enthält 2.3.
  2. DIVIDE A INTO B bedeutet B / A, nicht A / B.
  3. GIVING schreibt 4.6 nach Q; die ursprünglichen Werte bleiben als Operanden erhalten.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. DivIntoGiving.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9V9 VALUE 0.5.
       01 B PIC 9V9 VALUE 2.3.
       01 Q PIC 9V9.
       PROCEDURE DIVISION.
           DIVIDE A INTO B GIVING Q
           DISPLAY Q
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
4.6
PBXB64.exe cobol-test_divide_into_giving.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

6. ROUNDED bei einem ganzzahligen Zielfeld

Ablauf Schritt für Schritt

  1. Die beiden Operanden 1.4 und 1.4 ergeben 2.8.
  2. Das Zielfeld C besitzt mit PIC 9 keine Nachkommastelle.
  3. ROUNDED führt hier zur Ausgabe 3 statt einer abgeschnittenen 2.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. RoundedTest.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9V9 VALUE 1.4.
       01 B PIC 9V9 VALUE 1.4.
       01 C PIC 9.
       PROCEDURE DIVISION.
           ADD A TO B GIVING C ROUNDED
           DISPLAY C
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
3
PBXB64.exe cobol-test_rounded.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

7. Quotient und Rest eines Integerwerts

Ablauf Schritt für Schritt

  1. DIVIDE B INTO A berechnet 23 / 5.
  2. GIVING Q nimmt den ganzzahligen Quotienten 4 auf; REMAINDER R speichert 3.
  3. 4 × 5 + 3 ergibt wieder 23 und erklärt die beiden Ausgaben.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. RemainderTest.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9(4) VALUE 23.
       01 B PIC 9(4) VALUE 5.
       01 Q PIC 9(4).
       01 R PIC 9(4).
       PROCEDURE DIVISION.
           DIVIDE B INTO A GIVING Q REMAINDER R
           DISPLAY Q
           DISPLAY R
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
4
3
PBXB64.exe cobol-test_remainder.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

8. Ein skaliertes Restfeld

Ablauf Schritt für Schritt

  1. A ist 2.3 und B ist 0.5; Q hat PIC 9 und speichert den Quotienten 4.
  2. R besitzt PIC 9V9 und erhält den verbleibenden Wert 0.3.
  3. 4 × 0.5 + 0.3 ergibt 2.3. Das Format des Restfelds entscheidet über darstellbare Nachkommastellen.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. RemScaled.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9V9 VALUE 2.3.
       01 B PIC 9V9 VALUE 0.5.
       01 Q PIC 9.
       01 R PIC 9V9.
       PROCEDURE DIVISION.
           DIVIDE B INTO A GIVING Q REMAINDER R
           DISPLAY Q
           DISPLAY R
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
4
0.3
PBXB64.exe cobol-test_remainder_scaled.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

9. INSPECT zählt Zeichen im Datenfeld

Ablauf Schritt für Schritt

  1. WS-STR enthält BANANA in einem 20 Zeichen breiten Feld.
  2. TALLYING erhöht den bei 0 beginnenden WS-COUNT für jedes A.
  3. BANANA enthält drei A; die Ausgabe ist 3.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. InspectTallyingTest.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-STR    PIC X(20) VALUE "BANANA".
       01 WS-COUNT  PIC 9(4) VALUE 0.
       PROCEDURE DIVISION.
           INSPECT WS-STR TALLYING WS-COUNT FOR ALL "A"
           DISPLAY WS-COUNT
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
3
PBXB64.exe cobol-test_inspect_tallying.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

10. String-Intrinsics und feste Feldbreite

Ablauf Schritt für Schritt

  1. UPPER-CASE, LOWER-CASE und REVERSE ergeben ABC, abc und cba; LENGTH liefert 5 für hello.
  2. TRIM entfernt zunächst die rechten Leerzeichen. Die Zuweisung in PIC X(8) füllt anschließend wieder bis zur festen Feldbreite auf.
  3. ORD und CHAR verwenden hier die einsbasierte Zeichenordnung: ORD(A) ist 66 und CHAR(66) liefert A.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. w1str.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-T PIC X(8).
       PROCEDURE DIVISION.
           DISPLAY "[" FUNCTION UPPER-CASE("abc") "]".
           DISPLAY "[" FUNCTION LOWER-CASE("ABC") "]".
           DISPLAY "[" FUNCTION REVERSE("abc") "]".
           DISPLAY FUNCTION LENGTH("hello").
           MOVE FUNCTION TRIM("xy   ") TO WS-T.
           DISPLAY "[" WS-T "]".
           DISPLAY FUNCTION ORD("A").
           DISPLAY FUNCTION CHAR(66).
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
\[ABC\]\n\[abc\]\n\[cba\]\n5\n\[xy      \]\n66\nA\n
PBXB64.exe cobol-cobol_w1_intrinsics_string.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

11. 88er-Bedingungsnamen setzen und prüfen

Ablauf Schritt für Schritt

  1. Die Bedingungsnamen SMALL, MID und BIG beschreiben Wertebereiche desselben Datenfelds A.
  2. A = 5 erfüllt BIG. SET SMALL TO TRUE setzt danach einen passenden Wert für SMALL.
  3. Der folgende SET-FALSE-Fall wird vom konkreten PBXB64-Vertrag mit NOTSMALL geprüft; die Ausgaben lauten BIG, SMALL, NOTSMALL.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. L88.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9 VALUE 5.
           88 SMALL VALUES 1 THRU 4.
           88 MID   VALUES 1, 3 THRU 5.
           88 BIG   VALUES 5 THRU 9.
       PROCEDURE DIVISION.
           IF BIG DISPLAY "BIG" ELSE DISPLAY "SMALL" END-IF
           SET SMALL TO TRUE
           IF SMALL DISPLAY "SMALL" ELSE DISPLAY "BIG" END-IF
           SET SMALL TO FALSE
           IF SMALL DISPLAY "BAD" ELSE DISPLAY "NOTSMALL" END-IF
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
BIG
SMALL
NOTSMALL
PBXB64.exe cobol-test_88level.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

12. UNSTRING zerlegt ein kommagetrenntes Feld

Ablauf Schritt für Schritt

  1. WS-SRC enthält ONE,TWO,THREE.
  2. DELIMITED BY trennt an den Kommata und schreibt die Teile nach WS-A, WS-B und WS-C.
  3. Jedes Zielfeld ist fünf Zeichen breit. Die Ausgaben ONE und TWO besitzen deshalb nachfolgende Leerzeichen; THREE füllt sein Feld vollständig.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. UnstringDelimitedTest.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-SRC PIC X(30) VALUE "ONE,TWO,THREE".
       01 WS-A   PIC X(5).
       01 WS-B   PIC X(5).
       01 WS-C   PIC X(5).
       PROCEDURE DIVISION.
           UNSTRING WS-SRC DELIMITED BY "," INTO WS-A WS-B WS-C
           DISPLAY WS-A
           DISPLAY WS-B
           DISPLAY WS-C
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
ONE  
TWO  
THREE
PBXB64.exe cobol-test_unstring_delimited.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

Großes Beispiel: Entscheidungstabellen mit ALSO, THRU und NOT

Ablauf Schritt für Schritt

  1. EVALUATE A ALSO B betrachtet zwei Werte gemeinsam; der erste Fall (1, 2) trifft, (1, 9) verwendet den anderen Pfad.
  2. THRU umfasst die Bereichsgrenzen: 5 liegt zwischen 3 und 7, 8 liegt außerhalb. NOT kehrt Bereichs- oder Listenprüfungen um.
  3. Spätere Blöcke kombinieren Bereich und ausgeschlossene Liste über ALSO. Der vollständige Ausgabevertrag dokumentiert alle Entscheidungen einschließlich des abschließenden ANY-Falls.
IDENTIFICATION DIVISION.
       PROGRAM-ID. evalfull.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC 9 VALUE 1.
       01 B PIC 9 VALUE 2.
       PROCEDURE DIVISION.
           EVALUATE A ALSO B
               WHEN 1 ALSO 2
                   DISPLAY "BOTH"
               WHEN OTHER
                   DISPLAY "MISS"
           END-EVALUATE
           MOVE 9 TO B
           EVALUATE A ALSO B
               WHEN 1 ALSO 2
                   DISPLAY "BOTH"
               WHEN OTHER
                   DISPLAY "MISS"
           END-EVALUATE
           MOVE 5 TO A
           EVALUATE A
               WHEN 10
                   DISPLAY "TEN"
               WHEN 3 THRU 7
                   DISPLAY "RANGE"
               WHEN OTHER
                   DISPLAY "OTHER"
           END-EVALUATE
           MOVE 8 TO A
           EVALUATE A
               WHEN 3 THRU 7
                   DISPLAY "RANGE"
               WHEN OTHER
                   DISPLAY "OTHER"
           END-EVALUATE
           MOVE 9 TO A
           EVALUATE A
               WHEN NOT 1 THRU 8
                   DISPLAY "NOTRANGE"
               WHEN OTHER
                   DISPLAY "OTHER"
           END-EVALUATE
           MOVE 5 TO A
           EVALUATE A
               WHEN NOT 1 THRU 8
                   DISPLAY "NOTRANGE"
               WHEN OTHER
                   DISPLAY "OTHER"
           END-EVALUATE
           MOVE 4 TO A
           EVALUATE A
               WHEN NOT 1, 2
                   DISPLAY "NOTLIST"
               WHEN OTHER
                   DISPLAY "OTHER"
           END-EVALUATE
           MOVE 2 TO A
           EVALUATE A
               WHEN NOT 1, 2
                   DISPLAY "NOTLIST"
               WHEN OTHER
                   DISPLAY "OTHER"
           END-EVALUATE
           MOVE 5 TO A
           MOVE 9 TO B
           EVALUATE A ALSO B
               WHEN 3 THRU 7 ALSO NOT 1, 2
                   DISPLAY "COMBO"
               WHEN OTHER
                   DISPLAY "MISS"
           END-EVALUATE
           MOVE 1 TO B
           EVALUATE A ALSO B
               WHEN 3 THRU 7 ALSO NOT 1, 2
                   DISPLAY "COMBO"
               WHEN OTHER
                   DISPLAY "MISS"
           END-EVALUATE
           MOVE 1 TO A
           MOVE 2 TO B
           EVALUATE A ALSO B
               WHEN 1 ALSO 2
                   DISPLAY "BOTH"
               WHEN ANY
                   DISPLAY "MATCHED"
               WHEN OTHER
                   DISPLAY "MISS"
           END-EVALUATE
           STOP RUN.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
BOTH
MISS
RANGE
OTHER
NOTRANGE
OTHER
NOTLIST
OTHER
COMBO
MISS
BOTH
MATCHED
PBXB64.exe cobol-test_evaluate_also_thru_not.cbl -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

Alle Quellen dieser Lernseite

Jedes Beispiel hat einen eigenen Ordner; die README nennt die jeweiligen Compileraufrufe. Enthaltene Includes behalten ihre passenden Pfade.

Alle 13 Beispiele als ZIP

Bridging

Das numerische Beispiel bindet SHARED-COUNT aus COBOL in BASIC ein. Ein PIC-Feld ist kein allgemeiner Ersatz für einen nativen Maschinentyp; der konkrete Bridge-Vertrag übernimmt die passende Abbildung. PIC-X-Brücken sind separat zu qualifizieren.

Vollständige Quellenpaare ansehen