Funktion
Die Teilfeldselektion definiert ein Datenfeld durch die Angaben der Position des Anfangszeichens und der Länge des Datenfeldes.
Format
{bezeichner-1 | FUNCTION funktionsname-1 [({argument-1}... )] } (linke-zeichenstelle: [länge])
bezeichner-1 und FUNCTION funktionsname-1 sind nicht Teil des Teilfeldselektors, sondern sind hier nur zur Verdeutlichung angegeben.
Syntaxregeln
bezeichner-1 muss eines der folgenden Datenfelder sein:
ein Datenelement der Kategorie alphanumerisch oder eine alphanumerische Datengruppe.
ein alphabetisches Datenfeld.
ein numerisches bzw. alphanumerisches Datenfeld oder ein numerisches Datenfeld mit USAGE DISPLAY Angabe, wobei in allen Fällen das Datenfeld nicht einer stark typisierten Datengruppe untergeordnet sein darf.
ein Gruppendatenfeld, das nicht stark typisiert ist.
ein nationales Datenfeld.
ein numerisch druckaufbereitetes bzw. alphanumerisch druckaufbereitetes Datenfeld oder ein numerisches Datenfeld mit USAGE DISPLAY Angabe, wobei in allen Fällen das Datenfeld nicht einer stark typisierten Datengruppe untergeordnet sein darf.
linke-zeichenstelle und länge müssen arithmetische Ausdrücke sein.
Soweit nicht anders festgelegt, darf überall dort, wo ein Bezeichner für ein Datenfeld der Klasse alphanumerisch oder national erlaubt ist, eine Teilfeldselektion angewendet werden.
bezeichner-1 darf nicht teilfeldselektiert sein.
Die durch funktionsname-1 und ihre Argumente (falls vorhanden) angesprochene Funktion muss eine alphanumerische oder nationale Funktion sein.
bezeichner-1 darf sich nicht auf ein Gruppendatenfeld beziehen, das Datenfelder der Klassen objekt oder zeiger enthält.
Allgemeine Regeln
Jedem Zeichen von bezeichner-1 bzw. funktionsname-1 ist eine Ordinalzahl zugeordnet, die von der ganz links stehenden zu der ganz rechts stehenden Stelle schrittweise um eins zunimmt. Der ganz links stehenden Stelle ist die Zahl Eins zugewiesen. Enthält die Datenerklärung für datenname-1 eine SIGN IS SEPARATE-Klausel, wird der Vorzeichenposition ebenfalls eine Ordinalzahl in diesem Datenfeld zugewiesen.
Ist bezeichner-1 als numerisch, numerisch druckaufbereitet, alphanumerisch oder alphanumerisch druckaufbereitet beschrieben, wird es bei der Teilfeldselektion behandelt, als ob es als alphanumerisches Datenfeld derselben Größe redefiniert würde.
Ist bezeichner-1 subskribiert und für ein Subskript ALL angegeben, bezieht sich der Teilfeldselektor auf jedes der implizit angesprochenen Tabellenelemente.
Die Teilfeldselektion erzeugt ein eindeutiges Datenfeld, das eine Teilmenge des Datenfeldes bildet, auf das sich bezeichner-1 bzw. funktionsname-1 bezieht. Dieses eindeutige Datenfeld ist folgendermaßen definiert:
linke-zeichenstelle gibt an, ab welcher Zeichenposition von bezeichner-1 das Teilfeld beginnen soll.
linke-zeichenstelle muss einen positiven ganzzahligen Wert ungleich Null ergeben, der kleiner oder gleich der Anzahl der Zeichenstellen von bezeichner-1 bzw. funktionsname-1 und seiner Argumente (falls vorhanden) ist.länge bezeichnet die Länge des zu erzeugenden Teilfeldes. länge muss einen positiven ganzzahligen Wert ungleich Null ergeben.
Die Summe von linke-zeichenstelle und länge minus 1 darf nicht größer sein als die Zeichenanzahl des mit bezeichner-1 bzw. funktionsname-1 bezeichneten Datenfeldes. Ist länge nicht angegeben, erstreckt sich das erzeugte Teilfeld von der durch linke-zeichenstelle bezeichneten Position bis zum letzten Zeichen (einschließlich) des mit bezeichner-1 bzw. funktionsname-1 bezeichneten Ausgangsfeldes.
Das erzeugte Teilfeld wird als Datenelement ohne JUSTIFIED-Klausel betrachtet. Das erzeugte Teilfeld hat die gleiche Klasse und Kategorie wie bezeichner-1 bzw. wie funktionsname-1 mit der Ausnahme, dass die Kategorien numerisch, numerisch druckaufbereitet und alphanumerisch druckaufbereitet als Klasse und Kategorie alphanumerisch betrachtet werden und für eine alphanumerische Gruppe USAGE DISPLAY angenommen wird.
Beispiel 2-12
Ein Datenfeld KFZNR enthält ein 10-stelliges Kfz-Kennzeichen, von dem die letzten 6 Stellen in ein Teilfeld KURZNR übertragen werden sollen:
Programmausschnitt:
... 01 KFZNR PIC X(10). 01 KURZNR PIC X(6). ... MOVE KFZNR (5:6) TO KURZNR. ...