Verwenden Sie eine strukturierte Datensatzdefinition, wenn Sie das genaue Layout eines externen Dateidatensatzes abgleichen müssen oder ein externes
Programm aufrufen müssen, für das Datenfelder an einer genauen Position in einem Parameterpuffer sein müssen.
Ein strukturierter Datensatz weist folgende Merkmale auf:
- Der Datensatz hat ein festgelegtes Layout im Speicher.
- Der Datensatz belegt einen festgelegten Speicherplatz.
- Die Variablenwerte werden im Speicherbereich an einer festgelegten relativen Position (Offset) und Länge angezeigt.
Verwenden Sie beim Erstellen eines strukturierten Datensatzes Ebenennummern, um das genaue Layout der Datensatzfelder im Speicher anzugeben.
Die Feldtypen in einem strukturierten Datensatz müssen eine feste Länge haben.
EGL unterstützt die folgenden Typen in
Strukturfeldern (strukturierten Datensatzfeldern):
- Basiselementtypen (primitive Typen) und Datenelemente mit einer festen oder angegebenen Länge (beispielsweise INT oder CHAR(10), aber nicht STRING)
- Andere strukturierte Datensätze, wenngleich das Feld als Typ CHAR behandelt wird
- Feldgruppen eines beliebigen vorstehenden Typs mit festen Dimensionen
Ein Sonderfall eines strukturierten Datensatzes ist ein Datensatz variabler Länge, in dem EGL durch Suchen in einer Variablen
die Informationen vorfindet, die erforderlich sind, um die Datensatzgröße zu bestimmen. Weitere
Informationen finden Sie unter
Datensätze variabler Länge.
Datensätze mit Unterstrukturen
Jedes Feld in einem strukturierten Datensatz kann
Unterstrukturen enthalten, also als Summe kleinerer Felder deklariert werden. Jedem Feld wird eine beliebige Ebenennummer zugeordnet, wobei Zahlen
höherer Ebene ein Unterstrukturfeld angeben. Im folgenden Beispiel wird ein Feld definiert, das eine Telefonnummer enthält:
Record CustomerRecord type BasicRecord
10 phoneNumber CHAR(10);
20 areaCode CHAR(3);
20 localNumber CHAR(7);
end
Nach dem Deklarieren einer Variablen auf Basis dieses Datensatzabschnitts (beispielsweise
myCustomer) und nach dem Lesen von Informationen in die Variable können Sie auf die gesamte Telefonnummer als
myCustomer.phoneNumber zugreifen. Alternativ können Sie auch auf Teile der Telefonnummer zugreifen, indem Sie die Punktsyntax verwenden
(beispielsweise myCustomer.phoneNumber.localNumber oder - einfacher - myCustomer.localNumber).
Strukturierte Datensätze als Felder
Das folgende Beispiel zeigt einen strukturierten Datensatz, der einen weiteren strukturierten
Datensatz als Feld enthält:
record Outer
5 a INT;
5 b Inner; // sieht wie ein Datensatz aus, ist jedoch eigentlich CHAR
end
record Inner
10 c CHAR(10);
15 c2 CHAR(10);
10 d CHAR(10);
end
Das Feld
Outer.b ist mit dem Typ
Inner definiert und verweist auf einen Datensatz. Der eigentliche Typ für
Outer.b ist jedoch CHAR(20). Die Länge des Felds CHAR wird durch die Gesamtlänge des Datensatzes bestimmt.
Der Datensatz
Outer könnte stattdessen wie folgt definiert werden:
record Outer
5 a INT;
5 b CHAR(20);
10 c CHAR(10);
15 c2 CHAR(10);
10 d CHAR(10);
end
Strukturierte Datensätze in Ein-/Ausgabe
Strukturierte Datensätze werden vornehmlich für Ein-/Ausgabe mit bestimmten Datenzugriffstechnolgoien verwendet wie beispielsweise hierarchischen Datenbanken,
Nachrichtenwarteschlangen und indexierten Dateien. Bei den folgenden Datensatzstereotypen geht EGL von strukturierten Datensätzen aus, selbst wenn die Felder
keine Ebenennummern enthalten:
- IndexedRecord
- RelativeRecord
- SerialRecord
- MQRecord
Es hat sich bewährt, bei diesen Datensätzen Ebenennummern zu verwenden, um deutlich zu machen, dass es sich um strukturierte Datensätze handelt. Weitere
Informationen finden Sie in den zugehörigen Referenzen am Ende dieses Themas.