Lecții din modul (2/2)
Tabelele și clauza OCCURS
În COBOL, nu există niciun cuvânt cheie „matrice” sau „vector” pentru a defini liste de date omogene. În acest scop, utilizați clauza OCCURS, care specifică de câte ori se repetă o variabilă sau o structură în memorie.
Definirea unui tabel cu OCCURS
Clauza OCCURS este adăugată la declarația unei variabile subordonate (de exemplu, nivelul 05 sau mai mare) în cadrul unei structuri de grup (nivel 01):
01 WS-SALES-DATA.
05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.În acest exemplu, WS-MONTHLY-SALES este un tabel format din 12 elemente numerice a câte 4 cifre fiecare. Memoria alocată pentru această înregistrare va fi exact 12 * 4 = 48 de caractere.
Accesarea elementelor și indicilor
Pentru a accesa un anumit element dintr-un tabel, specificați indexul între paranteze imediat după numele câmpului.
[!IMPORTANT] Spre deosebire de majoritatea limbilor moderne care folosesc indexarea bazată pe 0, COBOL utilizează indexarea bazată pe 1. Primul element se află la indexul
1, al doilea la indexul2și așa mai departe.
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).Parcurgerea unui tabel (iterație)
Pentru a parcurge elementele unui tabel, puteți utiliza instrucțiunea PERFORM VARYING sau puteți gestiona manual un contor într-o buclă PERFORM UNTIL:
PERFORM UNTIL WS-INDEX > 12
DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
ADD 1 TO WS-INDEX
END-PERFORM.Încercați-l singur
Declarați un tabel cu 5 temperaturi zecimale (3 cifre întregi și 1 zecimală) în structura grupului WS-WEATHER-DATA folosind clauza OCCURS.
Afișează indiciu
Scrieți: 05 WS-TEMPERATURE PIC 9(3)V9 ARE DE 5 ORI.
Soluție disponibilă după 3 încercări
Inițializați primele trei elemente ale tabelului WS-MONTHLY-SALES cu valorile 1200, 1500 și, respectiv, 1800 folosind instrucțiunile MOVE. Amintiți-vă că indicii COBOL încep de la 1.
Afișează indiciu
Utilizați MOVE 1200 TO WS-MONTHLY-SALES(1). pentru primul element, apoi repetați pentru al doilea și al treilea folosind indicii (2) și (3).
Soluție disponibilă după 3 încercări