Strukturfeldgruppen übergeben

Sie können eine Strukturfeldgruppe an ein aufgerufenes Programm übergeben. Sowohl bei der Anweisung call als auch bei der Parameterliste des aufgerufenen Programms muss hierzu eine spezielle Konvention befolgt werden.

Als Beispiel wird vom folgenden Datensatzabschnitt ausgegangen:
Record MyRecordPart type basicRecord
   10 myInt INT[5];
   10 myChar CHAR(1);
end
Die Datensatzdeklaration sieht wie folgt aus:
myRecord MyRecordPart;
Falls Sie das Programm MyProgram aufrufen und anstelle eines einzelnen Elements oder des gesamten Datensatzes eine Strukturfeldgruppe übergeben müssen, muss die Anweisung call folgendermaßen codiert werden:
call MyProgram( myRecord.myInt[*] );

Der in eckige Klammern gesetzte Stern ([*]) bedeutet, dass die vorangehende Variable als Strukturfeldgruppe zu behandeln ist. Falls Sie myRecord.myInt ohne eckige Klammern angeben, empfängt das Programm nur das erste Element in der Feldgruppe. Dies entspricht funktional der Codierung myRecord.myInt[1].

Anschließend muss die Parameterliste im Programm selbst definiert werden:
Program MyProgram type BasicProgram ( myInt INT[5]! )
   
end

Das Ausrufezeichen gibt an, dass es sich bei der vorangehenden Variablen um eine Strukturfeldgruppe und nicht um eine dynamische Feldgruppe handelt, deren Größe im aufgerufenen Programm geändert werden kann. Die Größe der Feldgruppe und das Ausrufezeichen sind nach jeder Feldgruppendimension erforderlich.

Wenn Sie die hier beschriebenen Konventionen verwenden, erfolgt der Aufruf unter Umständen langsamer als bei einer Übergabe des gesamten Datensatzes. Als Beispiel soll hier ein Datensatz zugrunde gelegt werden, der auf dem folgenden Datensatzabschnitt basiert:
Record X type BasicRecord
	10 myChar CHAR(4)[2];
		20 mySubChar01 char(2);
		20 mySubChar02 char(2);
end

Wenn Sie die Feldgruppe mySubChar01 oder mySubChar02 übergeben, werden die Felder selbst dann in einem zusammenhängenden Speicherblock übergeben, wenn die Felder nicht zusammenhängend gespeichert sind. Die Daten müssen kopiert werden und diese zusätzliche Verarbeitung benötigt Zeit.

Das Leistungsproblem tritt für gewöhnlich in den folgenden Fällen auf:

Details über die Speicherung von mehrdimensionalen Strukturfeldern finden Sie unter 'Feldgruppen'.


Feedback