EMZETT.
Login

Kurz: Eine Tabelle (Array) wird mit OCCURS deklariert; Indizes beginnen bei 1:

Teil des Kurses COBOL

Kapitel 5 von 8 im Kurs COBOL (Abschnitt „Datenstrukturen“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Tabellen (OCCURS)

Eine Tabelle (Array) wird mit OCCURS deklariert; Indizes beginnen bei 1:

IDENTIFICATION DIVISION.
PROGRAM-ID. TABELLEN.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ZAHLEN.
   05 Z      PIC 99 OCCURS 5 TIMES.
01 NAMEN.
   05 N      PIC X(6) OCCURS 3 TIMES.
01 LAGER.
   05 ARTIKEL OCCURS 3 TIMES.
      10 A-NAME  PIC X(8).
      10 A-MENGE PIC 999.
01 I         PIC 99.
01 SUMME     PIC 999 VALUE 0.
01 MAXIMUM   PIC 99  VALUE 0.
 
PROCEDURE DIVISION.
    MOVE 12 TO Z(1). MOVE 7 TO Z(2). MOVE 25 TO Z(3).
    MOVE 3 TO Z(4).  MOVE 18 TO Z(5).
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
        ADD Z(I) TO SUMME
        IF Z(I) > MAXIMUM
            MOVE Z(I) TO MAXIMUM
        END-IF
    END-PERFORM.
    DISPLAY "Summe " SUMME " Maximum " MAXIMUM.
 
    MOVE "Mia" TO N(1). MOVE "Tom" TO N(2). MOVE "Zoe" TO N(3).
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
        DISPLAY I ": " N(I)
    END-PERFORM.
 
    MOVE "Apfel"  TO A-NAME(1).  MOVE 40 TO A-MENGE(1).
    MOVE "Birne"  TO A-NAME(2).  MOVE 15 TO A-MENGE(2).
    MOVE "Kirsche" TO A-NAME(3). MOVE 8  TO A-MENGE(3).
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
        DISPLAY A-NAME(I) " " A-MENGE(I)
    END-PERFORM.
    STOP RUN.

Ausgabe:

Summe 065 Maximum 25
01: Mia
02: Tom
03: Zoe
Apfel    040
Birne    015
Kirsche  008

Tabellen durchsuchen und sortieren

IDENTIFICATION DIVISION.
PROGRAM-ID. SUCHEN.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PREISTABELLE.
   05 EINTRAG OCCURS 4 TIMES INDEXED BY IDX.
      10 P-NAME  PIC X(6).
      10 P-PREIS PIC 9(3)V99.
01 GESUCHT  PIC X(6) VALUE "Milch".
01 TAUSCH-N PIC X(6).
01 TAUSCH-P PIC 9(3)V99.
01 I        PIC 9.
01 J        PIC 9.
01 K        PIC 9.
 
PROCEDURE DIVISION.
    MOVE "Brot"  TO P-NAME(1). MOVE 2.50 TO P-PREIS(1).
    MOVE "Milch" TO P-NAME(2). MOVE 1.20 TO P-PREIS(2).
    MOVE "Kaese" TO P-NAME(3). MOVE 4.00 TO P-PREIS(3).
    MOVE "Eier"  TO P-NAME(4). MOVE 2.20 TO P-PREIS(4).
 
    SET IDX TO 1.
    SEARCH EINTRAG
        AT END DISPLAY "nicht gefunden"
        WHEN P-NAME(IDX) = GESUCHT
            DISPLAY GESUCHT " kostet " P-PREIS(IDX)
    END-SEARCH.
 
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3             *> Bubblesort nach Preis
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 4 - I
            COMPUTE K = J + 1
            IF P-PREIS(J) > P-PREIS(K)
                MOVE P-NAME(J)  TO TAUSCH-N
                MOVE P-PREIS(J) TO TAUSCH-P
                MOVE P-NAME(K)  TO P-NAME(J)
                MOVE P-PREIS(K) TO P-PREIS(J)
                MOVE TAUSCH-N TO P-NAME(K)
                MOVE TAUSCH-P TO P-PREIS(K)
            END-IF
        END-PERFORM
    END-PERFORM.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
        DISPLAY P-NAME(I) " " P-PREIS(I)
    END-PERFORM.
    STOP RUN.

Ausgabe:

Milch  kostet 001.20
Milch  001.20
Eier   002.20
Brot   002.50
Kaese  004.00

Zeichenketten bearbeiten

IDENTIFICATION DIVISION.
PROGRAM-ID. TEXTE.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VORNAME  PIC X(8) VALUE "Mia".
01 NACHNAME PIC X(8) VALUE "Müller".
01 VOLL     PIC X(20).
01 TEXT-1   PIC X(20) VALUE "Hallo Welt, hallo".
01 ZAEHLER  PIC 99 VALUE 0.
01 TEIL1    PIC X(6).
01 TEIL2    PIC X(6).
01 ZEIGER   PIC 99 VALUE 1.
 
PROCEDURE DIVISION.
    STRING VORNAME DELIMITED BY SPACE
           " "     DELIMITED BY SIZE
           NACHNAME DELIMITED BY SPACE
           INTO VOLL.
    DISPLAY "[" VOLL "]".
 
    UNSTRING "alpha,beta" DELIMITED BY "," INTO TEIL1 TEIL2.
    DISPLAY TEIL1 "|" TEIL2.
 
    INSPECT TEXT-1 TALLYING ZAEHLER FOR ALL "l".
    DISPLAY "Anzahl l: " ZAEHLER.
    INSPECT TEXT-1 REPLACING ALL "a" BY "A".
    DISPLAY TEXT-1.
    INSPECT TEXT-1 CONVERTING "abcdefghijklmnopqrstuvwxyz" TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
    DISPLAY TEXT-1.
 
    DISPLAY TEXT-1(1:5).                     *> Teilstring: Position 1, Länge 5
    DISPLAY FUNCTION LENGTH(TEXT-1).
    DISPLAY FUNCTION UPPER-CASE("klein").
    DISPLAY FUNCTION REVERSE("abc").
    DISPLAY FUNCTION TRIM("   getrimmt   ") "|".
    DISPLAY FUNCTION NUMVAL("42.5").
    STOP RUN.

Ausgabe:

[Mia Müller         ]
alpha |beta
Anzahl l: 05
HAllo Welt, hAllo
HALLO WELT, HALLO
HALLO
20
KLEIN
cba
getrimmt|
00000042.5

Merke

  • OCCURS n TIMES definiert Tabellen, Zugriff mit Z(i), Indizes ab 1
  • SEARCH durchsucht Tabellen mit Index (INDEXED BY)
  • Texte: STRING ... DELIMITED BY, UNSTRING, INSPECT TALLYING/REPLACING/CONVERTING
  • Teilstrings text(start:länge), Funktionen mit FUNCTION name(...)

Übungsaufgabe

Speichere fünf Noten in einer Tabelle und berechne den Durchschnitt.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Bedingungen und Schleifen mit PERFORM

Weiter: Eingabe, Berichte und Formatierung

Alle Kapitel: COBOL im Überblick