Een tabel bevat gegevens. Vaak willen we in een tabel iets opzoeken. Het zoeken naar een element van een tabel kunnen we zelf programmeren met een perform until en een if-opdracht. Zoeken in een tabel kunnen we ook aan de computer overlaten. COBOL bevat er een speciale opdracht voor: het search-statement. Met deze opdracht kunnen we de computer een tabel vanaf een op te geven plaats, het beginpunt, laten doorlopen. Over de search-opdracht meer in paragraaf 11.3.
Bij het doorlopen van een tabel gebruikt de computer een intern veld of een intern register als een soort subscript. Om zo'n intern computerveld te onderscheiden van een gewone subscript, noemen we het een index. Een index is een lokatie die de computer gebruikt om elementen van een tabel aan te wijzen.
Hoe een index eruit ziet, mag de computer zelf bepalen. Voor de programmeur (M/V) is het niet van belang op welke manier de computer de index bijhoudt. Voor de programmeur is alleen de naam van de index interessant. De programmeur mag een index waarvoor de computer in het geheugen ruimte reserveert namelijk wel gebruiken. Bijvoorbeeld om aan te geven vanaf welk punt in de tabel de computer moet beginnen met zoeken.
onthoud
Voor een index is de volgende taakverdeling bedacht: de programmeur geeft het veld een naam en de computer bepaalt de interne vorm, zoals de lengte van de geheugenruimte. Zowel de programmeur als de computer mogen de index gebruiken.
We leggen de naam van een index vast via een uitbreiding op de occurs-clausule.
01 Omzettentabel. 02 Omzet occurs 275 times indexed by vest-ind pic 9(7).
Vest-ind is een index die hoort bij de 275 velden omzet.
onthoud
Een index is tabelgebonden. Dat wil zeggen dat we een index alleen mogen gebruiken voor de tabel waaraan hij via indexed by is verbonden
De index vest-ind kan in het programma alleen maar een element aanwijzen in de bovengenoemde tabel; niet in een andere tabel. Waarom is dat zo? Dat komt omdat we hadden afgesproken dat de computer mag bepalen op welke manier hij een index bijhoudt. Hij kan bij voorbeeld het geheugenadres van een tabelelement gebruiken. Dat adres in het interne geheugen is het adres van een bepaalde tabel. Wanneer we de index voor een andere tabel zouden gebruiken, dan klopt dat adres niet meer. Vandaar de regel: een index is tabelgebonden.
De naam vest-ind is genoemd achter indexed by. De naam komt in de data division verder niet voor. We mogen geen picture-clausule of andere clausules opgeven. We hadden immers afgesproken dat de computer zelf de lengte en dergelijke van dat veld mocht kiezen...
In een programma mogen we als subscript ook een index schrijven. Voorbeeld:
move Omzet(vest-ind) to afdrukregel
Dat de subscript vest-ind geen gewone variabele is, maar een index, kun je aan deze move-opdracht niet zien. Dat blijkt als je in de data division kijkt.