Die Definition von Array-Dimensionen ist im Statement DEFINE DATA OBJECT möglich und außerdem in der variable-definition-Option bei folgenden Statements: DEFINE DATA LOCAL, DEFINE DATA INDEPENDENT, DEFINE DATA CONTEXT, DEFINE DATA OBJECT.
Die array-dimension-definition hat die folgende Syntax:
Dieses Dokument behandelt folgende Themen:
Funktion
Mit der array-dimension-definition können Sie bei einer Array-Definition die Unter- und Obergrenze (bound) einer Dimension festlegen.
Sie können bis zu 3 Dimensionen für ein Array definieren.
Siehe auch Arrays im Leitfaden zur Programmierung.
Syntax-Beschreibung
boundAls Grenze (bound) kann eines der folgenden Elemente verwendet werden:
eine numerische Ganzzahl-Konstante
eine vorher definierte Namens-Konstante
(bei Datenbank-Arrays) eine vorher definierte Benutzervariable
ein Stern (*); dieser definiert einen erweiterbaren bound, auch bekannt als X-Array.
Wenn nur ein Bound angegeben ist, stellt der Wert die Obergrenze dar, und die Untergrenze wird als 1 angenommen.
X-Arrays
Wenn mindestens eine Grenze (bound) in mindestens einer Dimension eines Arrays als erweiterbar angegeben wird, bezeichnet man dieses Array als X-Array (eXtensible Array). Nur eine Grenze (entweder oberer oder unterer) in einer Dimension kann erweiterbar sein, aber nicht beide. Mehrdimensionale Arrays können eine Mischung von konstanten und erweiterbaren Grenzen haben, z.B. #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 0.
Beispiel:
Die folgende Tabelle enthält eine Übersicht über die Grenzen der Arrays aus dem obigen Programm.
Dimension 1Dimension 2Dimension 3Untere GrenzeObere GrenzeUntere GrenzeObere GrenzeUntere GrenzeObere Grenze#ARRAY1110----#ARRAY2110----#X-ARRAY31erweiterbar----#X-ARRAY41erweiterbar15--#X-ARRAY5erweiterbar10----#X-ARRAY6110100erweiterbarerweiterbar1000Beispiele für Array-Definitionen:
#ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional arrayVariable Arrays in einer Parameter Data Area:
In einer Parameter Data Area können Sie ein Array mit einer variablen Anzahl von Ausprägungen angeben. Dies erfolgt mittels der Index-Notation #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 1.
Beispiel 1: #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 2
Beispiel 2: #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 3
Ein Parameter-Array, das eine variable Index-Notation #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 1 enthält, kann nur redefiniert werden in der Länge
seiner elementaren Feldlänge, wenn der Index #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 1 ganz rechts steht, zum Beispiel:
#ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 6 kann bis zu einer Länge von 6 Bytes redefiniert werden;
#ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 7 kann bis zu einer Länge von 6 Bytes redefiniert werden;
#ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 8 kann bis zu einer Länge von 6 Bytes redefiniert werden.des Produkts der ganz rechts stehenden festen Ausprägungen und der elementaren Feldlänge, zum Beispiel:
#ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 9 kann bis zu einer Länge von 2*6 = 12 Bytes redefiniert werden;
DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 0 kann bis zu einer Länge von 3*2*6 = 36 Bytes redefiniert werden;
DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 1 kann bis zu einer Länge von 3*6 = 18 Bytes redefiniert werden.
Eine variable Index-Notation #ARRAY2(I4/10) /* a one-dimensional array with 10 occurrences (1:10) #X-ARRAY4(I4/*,1:5) /* a two-dimensional array #X-ARRAY6(I4/1:10,100:*,*:1000) /* a three-dimensional array 1 darf nicht in einem Redefinitionsblock verwendet werden.
Beispiel:
DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINEDa die Anzahl der Ausprägungen zur Kompilierungszeit nicht bekannt ist, darf es nicht mit der Index-Notation (*) in den Statements DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 3, DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 4, DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 5 und DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 6 referenziert werden. Die Index-Notation (*) kann entweder für alle Dimensionen oder für keine Dimension benutzt werden.
Gültige Beispiele:
#ARR01 (*) #ARR02 (*,*) #ARR01 (1) #ARR02 (5,#FIELDX) #ARR02 (1,1:3)Ungültiges Beispiel:
#ARRAYY (1,*) /* not allowedUm Laufzeitfehler zu vermeiden, sollte die maximale Anzahl der Ausprägungen eines solchen Arrays über einen anderen Parameter an das Subprogramm/die Subroutine übergeben werden. Als Alternative dazu können Sie die Systemvariable DEFINE DATA PARAMETER 1 #ARR(A6/1:V) 1 REDEFINE #ARR 2 #R-ARR(A1/1:V) /* (1:V) is not allowed in a REDEFINE block END-DEFINE 7 benutzen.