Modulelessen (2/2)
Tabellen en OCCURS-clausule
In COBOL bestaat er geen trefwoord "array" of "vector" om lijsten met homogene gegevens te definiëren. Voor dit doel gebruikt u de clausule OCCURS, die specificeert hoe vaak een variabele of structuur in het geheugen wordt herhaald.
Een tabel definiëren met OCCURS
De clausule OCCURS wordt toegevoegd aan de declaratie van een ondergeschikte variabele (bijvoorbeeld niveau 05 of hoger) binnen een groepsstructuur (niveau 01):
01 WS-SALES-DATA.
05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.In dit voorbeeld is WS-MONTHLY-SALES een tabel die bestaat uit 12 numerieke elementen van elk 4 cijfers. Het toegewezen geheugen voor dit record zal precies 12 * 4 = 48 tekens bedragen.
Toegang tot elementen en indexen
Om toegang te krijgen tot een specifiek element in een tabel, specificeert u de index tussen haakjes direct na de veldnaam.
[!BELANGRIJK] In tegenstelling tot de meeste moderne talen die indexering op basis van 0 gebruiken, gebruikt COBOL indexering op basis van 1. Het eerste element bevindt zich op index
1, het tweede op index2, enzovoort.
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).Een tabel doorlopen (iteratie)
Om de elementen van een tabel te doorlopen, kunt u de instructie PERFORM VARYING gebruiken of een teller handmatig beheren in een PERFORM UNTIL lus:
PERFORM UNTIL WS-INDEX > 12
DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
ADD 1 TO WS-INDEX
END-PERFORM.Probeer het zelf
Declareer een tabel met 5 decimale temperaturen (3 gehele cijfers en 1 decimaal) onder de groepsstructuur WS-WEATHER-DATA met behulp van de OCCURS-clausule.
Toon hint
Schrijf: 05 WS-TEMPERATUUR FOTO 9(3)V9 komt 5 keer voor.
Oplossing beschikbaar na 3 pogingen
Initialiseer de eerste drie elementen van de tabel WS-MONTHLY-SALES met respectievelijk de waarden 1200, 1500 en 1800 met behulp van MOVE-instructies. Houd er rekening mee dat COBOL-indexen beginnen vanaf 1.
Toon hint
Gebruik MOVE 1200 NAAR WS-MONTHLY-SALES(1). voor het eerste element, herhaal dan voor het tweede en derde met behulp van de indexen (2) en (3).
Oplossing beschikbaar na 3 pogingen