Die Indizierung ist eine weitere Methode, auf Tabellenelemente Bezug zu nehmen.Die Indizierung ist möglich, wenn die INDEXED BY-Angabe in der OCCURS-Klausel angegeben ist.
Der Index benötigt keine eigene Datenerklärung. Zur Programmablaufzeit ist der Wert eines Index eine Zahl in Binärform, die die Distanz zum Tabellenbeginn angibt. Der Wert dieser Binärzahl lässt sich aus der Nummer und Länge des Tabellenelements wie folgt errechnen:
Binärwert des Index = (Tabellenelementnummer -
1) *
Tabellenelementlänge.
Der Wert eines Index kann nur mit der SET-, SEARCH- und PERFORM-Anweisung gesetzt werden. Der Anfangswert ist undefiniert und muss explizit gesetzt werden.
Es gibt zwei Formen der Indizierung:
Direkte Indizierung
Relative Indizierung
Direkte Indizierung
Direkte Indizierung liegt dann vor, wenn man einen Index in der Art eines direkten Subskripts benutzt.
Beispiel 2-18
01 TABELLE. 02 TABELLE-A PIC XX OCCURS 10 TIMES INDEXED BY INDEX-A. 02 TABELLE-B PIC X(3) OCCURS 5 TIMES INDEXED BY INDEX-B. ... PROCEDURE DIVISION. ... SET INDEX-A TO 7. ... MOVE "X7" TO TABELLE-A (INDEX-A). ...
Es werden zwei Tabellen definiert:
TABELLE-A mit 10 Elementen der Länge 2 Byte
TABELLE-B mit 5 Elementen der Länge 3 Byte
Durch die INDEXED BY-Angabe wird der Index INDEX-A für TABELLE-A und der Index INDEX-B für TABELLE-B vereinbart. Indizes dürfen nur mit dem entsprechenden Datenelement benutzt werden, z.B. TABELLE-A(INDEX-A) oder TABELLE-B(INDEX-B).
Die SET-Anweisung setzt den Index auf einen Wert, der auf das siebte Element von TABELLE-A zeigt. Die Distanz zum Anfang der Tabelle, also der interne binäre Inhalt von INDEX-A, ist (7-
1) *
2 = 12. So überträgt die MOVE-Anweisung X7 in das siebte Tabellenelement.
Relative Indizierung
Folgt dem Namen eines Tabellenelements ein Index in Form von
(index + ganzzahl-1),
errechnet sich die benötigte Tabellenelementnummer aus dem Wert, den index zur Programmablaufzeit hat, plus ganzzahl-1.
Nimmt man die Form
(index -
ganzzahl-2),
erhält man die Tabellenelementnummer, indem man ganzzahl-2 von der entsprechenden Tabellenelementnummer subtrahiert.
Durch Einsetzen der relativen Indizierung werden die Werte der Indizes im Zielprogramm nicht verändert.
Erlaubte Wertebereiche für Indizes
Der Wert eines Index sollte lt. Norm einer gültigen Tabellenelementnummer der zugehörigen Tabelle entsprechen. Dieser Compiler lässt jedoch auch 0, ZERO oder negativen Zahlen entsprechende Elementnummern und Werte jenseits der höchsten erlaubten Elementnummer zu, mit der Einschränkung, dass der Binärwert des Index in dem (in 4 Byte darstellbaren) Bereich von -
231 bis +231 -
1 bleibt. Vor der Verwendung muss in diesen Fällen der Index auf eine gültige Elementnummer gesetzt werden (z.B. mit SET UP bzw. SET DOWN) oder es muss durch entsprechende relative Indizierung dafür gesorgt werden, dass nur gültige Tabellenelemente angesprochen werden.