Kurz: Eine Tabelle (Array) wird mit OCCURS deklariert; Indizes beginnen bei 1:
Teil des Kurses COBOL
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 008Tabellen 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.00Zeichenketten 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.5Merke
OCCURS n TIMESdefiniert Tabellen, Zugriff mitZ(i), Indizes ab 1SEARCHdurchsucht Tabellen mit Index (INDEXED BY)- Texte:
STRING ... DELIMITED BY,UNSTRING,INSPECT TALLYING/REPLACING/CONVERTING - Teilstrings
text(start:länge), Funktionen mitFUNCTION name(...)
Übungsaufgabe
Speichere fünf Noten in einer Tabelle und berechne den Durchschnitt.
Quiz zur Selbstkontrolle
Bei welchem Index beginnt eine COBOL-Tabelle?
- 1 (richtig)
- 0
- -1
- 2
Was macht UNSTRING?
- Zerlegt eine Zeichenkette in Teile (richtig)
- Verbindet Zeichenketten
- Löscht eine Zeichenkette
- Kopiert eine Datei
Wie beschreibt man einen Teilstring?
- feld(start:länge) (richtig)
- feld[start..ende]
- SUBSTR(feld)
- feld.slice
Weiter im Kurs
Zurück: Bedingungen und Schleifen mit PERFORM
Weiter: Eingabe, Berichte und Formatierung
Alle Kapitel: COBOL im Überblick