Loading...
Select Version
&pagelevel(4)&pagelevel
Wenn eine Prozedur von den Möglichkeiten der Programmierung mit SDF-P Gebrauch machen soll, sind über die reinen Ausführungskommandos hinaus weitere Deklarations- und Steuerkommandos erforderlich. Dies soll anhand eines Beispiels anschaulich gemacht werden; die Bedeutung der einzelnen Kommandos wird anschließend schrittweise erläutert.
Die folgende Beispielprozedur dient dazu, die letzten (standardmäßig zehn) Zeilen einer Textdatei nach SYSOUT auszugeben:
/SET-PROC-OPT IMPLICIT-DECLARATION=*NO
/BEG-PARAM-DECL
/ DECL-PARAM DATEI(TYPE=*STRING)
/ DECL-PARAM ANZAHL-ZEILEN(TYPE=*INTEGER,INIT=10)
/END-PARAM-DECL
/
/"Als DATEI wird ein vollqualifizierter Dateiname (ohne "
/"Generation/Version) oder eine Elementangabe der Form "
/" '[*LIBRARY-ELEMENT](library,element[(version)],type)' "
/"erwartet "
/
/"Benoetigte Hilfsvariablen:"
/DECL-VAR I(TYPE=*INTEGER)
/DECL-VAR DATEN(TYPE=*STRING),MULTIPLE-ELEMENTS=*LIST
/DECL-VAR BIB(TYPE=*STRING)
/
/"Pruefung, ob die Datei/das Element existiert,"
/"damit eine gezielte Fehlermeldung ausgegeben werden kann"
/I = INDEX(DATEI,'(')
/IF (I > 0) "Name enthaelt '(', also Bibliothek"
/ BIB = SUBLIST(SUBSTR(DATEI,I),1) "Bibliotheksname"
/ IF NOT IS-CATALOGED-FILE(BIB)
/ WRITE-TEXT 'Bibliothek &BIB existiert nicht!'
/ EXIT-PROCEDURE ERROR=*YES
/ END-IF
/ IF NOT IS-LIBRARY(BIB)
/ WRITE-TEXT 'Datei &BIB ist keine Bibliothek!'
/ EXIT-PROCEDURE ERROR=*YES
/ END-IF
/ELSE-IF NOT IS-CATALOGED-FILE(DATEI)
/ WRITE-TEXT 'Datei &DATEI existiert nicht!'
/ EXIT-PROCEDURE ERROR=*YES
/END-IF
/
/"Daten in eine Variablenliste einlesen"
/READ-VAR *LIST(DATEN),STRING-QUOTES=*NO,INPUT=&DATEI
/I = SIZE('DATEN') - ANZAHL-ZEILEN + 1 "Startposition berechnen"
/IF (I < 1); I = 1; END-IF "nicht vor die erste Zeile!"
/FOR I = *COUNTER( FROM = I, TO = SIZE('DATEN'), INCREMENT = 1 )
/ WRITE-TEXT &(TO-C-LITERAL(DATEN#I))
/END-FOR