Lekcje modułu (2/2)
Tabele i Klauzula OCCURS
W COBOL-u nie istnieje słowo kluczowe "array" ani "wektor" do definiowania list jednorodnych danych. W tym celu używa się klauzuli OCCURS, która określa liczbę powtórzeń zmiennej lub struktury w pamięci.
Definiowanie tabeli za pomocą OCCURS
Klauzulę OCCURS dodaje się do deklaracji zmiennej podrzędnej (na przykład poziomu 05 lub wyższego) wewnątrz struktury grupowej (poziom 01):
01 WS-SALES-DATA.
05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.
W tym przykładzie WS-MONTHLY-SALES to tabela składająca się z 12 elementów numerycznych o długości 4 cyfr każdy. Pamięć przydzielona dla tego rekordu wyniesie dokładnie 12 * 4 = 48 znaków.
Dostęp do elementów i indeksy
Aby uzyskać dostęp do konkretnego elementu w tabeli, podaje się indeks w nawiasie bezpośrednio po nazwie pola.
[!IMPORTANT] W przeciwieństwie do większości nowoczesnych języków, które używają indeksowania od 0, COBOL używa indeksowania od 1. Pierwszy element znajduje się pod indeksem
1, drugi pod indeksem2i tak dalej.
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).
Iterowanie po tabeli (Pętle)
Aby przejść przez elementy tabeli, można użyć instrukcji PERFORM VARYING oder ręcznie zarządzać licznikiem w pętli PERFORM UNTIL :
PERFORM UNTIL WS-INDEX > 12
DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
ADD 1 TO WS-INDEX
END-PERFORM.
Spróbuj sam
Zadeklaruj tabelę zawierającą 5 temperatur dziesiętnych (3 cyfry całkowite i 1 dziesiętna) pod strukturą grupową WS-WEATHER-DATA za pomocą klauzuli OCCURS.
Pokaż wskazówkę
Wpisz: 05 WS-TEMPERATURE PIC 9(3)V9 OCCURS 5 TIMES.
Rozwiązanie dostępne po 3 próbach
Zainicjalizuj trzy pierwsze elementy tabeli WS-MONTHLY-SALES odpowiednio wartościami 1200, 1500 i 1800 przy użyciu instrukcji MOVE. Pamiętaj, że indeksy w COBOL-u zaczynają się od 1.
Pokaż wskazówkę
Użyj MOVE 1200 TO WS-MONTHLY-SALES(1). dla pierwszego elementu, a następnie powtórz to dla drugiego i trzeciego elementu, używając indeksów (2) i (3).
Rozwiązanie dostępne po 3 próbach