Funktion
Die ANY LENGTH-Klausel bewirkt, dass die Länge eines formalen Parameters einer Methode durch die Länge des Argumentes bestimmt wird.
Format
ANY LENGTH
Syntaxregeln
Die ANY LENGTH-Klausel darf nur in Datenerklärungen mit der Stufennummer 01 oder 77 in der LINKAGE SECTION einer Methode angegeben werden.
Die Datenerklärung muss eine PICTURE-Klausel enthalten, deren Maskenzeichenfolge aus einem einzelnen "X" oder "N" besteht.
Allgemeine Regeln
Durch die ANY LENGTH-Klausel wird das Datenelement als variabel lang definiert. Die aktuelle Länge des Datenelementes entspricht der Länge des Argumentes bzw. Rückgabeelementes des Aufrufers.
Ist das dem Datenelement entsprechende Argument bzw. Rückgabeelement des Aufrufers ein null-längiges Datenfeld, so ist auch das Datenelement ein null-längiges Datenfeld.
Beispiel 7-3
METHOD-ID. SEARCH-CHAR. DATA DIVISION. LINKAGE SECTION. 01 PAR1 PIC X ANY LENGTH. 01 PAR2 PIC X. 01 IDX PIC 9(9) USAGE COMP-5. PROCEDURE DIVISION USING PAR1 PAR2 RETURNING IDX. PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > FUNCTION LENGTH(PAR1) IF PAR1(IDX:1) = PAR2 EXIT METHOD *> Zeichen gefunden ---->>>> END-IF END-PERFORM MOVE 0 TO IDX. *> Zeichen nicht gefunden EXIT METHOD. END METHOD SEARCH-CHAR.
Ausschnitt eines Programms, aus dem die Methode SEARCH-CHAR aufgerufen wird:
... 01 OBJ USAGE IS OBJECT REFERENCE. 01 I PIC 9(9) USAGE IS COMP-5. 01 F1 PIC x(50). 01 F2 02 ELEM OCCURS 100 DEPENDING ON I. ... INVOKE OBJ "SEARCH-CHAR" USING F1,"X" RETURNING I. ———————————— (1) INVOKE OBJ "SEARCH-CHAR" USING F2,"Y" RETURNING I. ———————————— (2) ...
(1) | Die aktuelle Länge des Parameters PAR1 beträgt 50. Die Länge muss vom Anwender nicht übergeben werden. |
(2) | Die aktuelle Länge des Parameters PAR1 ist erst dynamisch zur Ablaufzeit bekannt. |
Änderungen des RETURNING-Parameters IDX in der Methode SEARCH-VAR wirken sich auf die Länge des aktuellen Parameters F2 erst nach Rückkehr aus der Methode SEARCH-CHAR aus.
Die unterschiedliche Länge der aktuellen Parameter F1 bzw. F2 stellt wegen der ANY LENGTH-Klausel keinen Verstoß gegen Conformance-Regeln dar.