Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Aufbau einer S-Prozedur

&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