Een tabel met twee dimensies ontstaat, wanneer een tabelelement zelf ook weer uit tabelelementen bestaat. We nemen als voorbeeld een opleidingsinstituut dat vier verschillende examens afneemt. In een tabel wil men per examen vastleggen hoeveel kandidaten geslaagd zijn. Er zijn gegevens beschikbaar over drie jaren (1986, 1987 en 1988). In COBOL kunnen we een tabel daarvoor als volgt beschrijven:
01 aantal-geslaagden. 03 jaar occurs 3 times. 05 examen occurs 4 times, picture 9999.
Om het voorbeeld niet te uitgebreid te maken, nemen we een kleine tabel, maar alle voorbeelden die volgen, gelden ook voor grotere tabellen. De beschreven tabel is in eerste instantie ingedeeld in drie gedeelten, bestemd voor de drie jaren. Elk jaar kan worden benaderd met één subscript: jaar(1), jaar(2) en jaar(3). Elk veld jaar bestaat uit een tabel van 4 examens. Het veld jaar(1) heeft vier examens onder zich, het veld jaar(2) ook, enzovoort.
illustratie: Geert Nijmolen
Het is niet voldoende om één subscript te vermelden achter examen, want het moet ook duidelijk zijn bij welk jaar het betrokken examen hoort. Om een veld examen aan te wijzen hebben we twee subscripts nodig: de eerste subscript geeft het jaar aan, de tweede subscript het examen. Voorbeelden:
De eerste subscript slaat dus op het veld met een occurs-clausule dat het laagste niveau-nummer heeft (jaar heeft niveau-nummer 03). De tweede subscript slaat op het volgende veld met de occurs-clausule (examen heeft niveau-nummer 05).
Roep nog even de functie van de komma en de puntkomma in herinnering terug. In COBOL zijn dat scheidingstekens zonder betekenis. Als scheidingsteken tussen de twee subscripts fungeert de spatie. We mogen wel de komma weglaten (en alleen een spatie schrijven), maar we mogen niet de spatie weglaten en alleen een komma schrijven.
Het werken met een tabel van twee dimensies is niet veel moeilijker dan met een eendimensionale tabel. We moeten er alleen aan denken het juiste aantal subscripts te vermelden.
Als eerste voorbeeld volgt hier een stukje programma om het totaal aantal geslaagden van examen 4 te bepalen over alle jaren. We moeten de subscript voor het examen op 4 houden en de subscript voor het jaar variëren.
move zero to examentotaal perform with test after varying jaar-subs from 1 by 1 until jaar-subs >= 3 add examen(jaar-subs, 4) to examentotaal end perform
Dit stukje programma komt overeen met:
move zero to examentotaal add examen(1, 4) to examentotaal add examen(2, 4) to examentotaal add examen(3, 4) to examentotaal
Als tweede voorbeeld volgt hier een stukje programma om het aantal geslaagden van alle examens te bepalen voor jaar nummer 3. We moeten de subscript voor het jaarnummer op 3 houden en de subscript voor het examen variëren.
perform with test after varying examen-subs from 1 by 1 until examen-subs >= 4 add examen(3, examen-subs) to jaartotaal end perform
Dit stukje programma komt overeen met:
add examen(3, 1) to jaartotaal add examen(3, 2) to jaartotaal add examen(3, 3) to jaartotaal add examen(3, 4) to jaartotaal