Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Beispiel 2: Kommando zum Ausgeben von Datei-Inhalten

&pagelevel(4)&pagelevel

Es soll ein Kommando definiert und mittels Prozedur implementiert werden, das den Inhalt einer SAM- oder ISAM-Datei auf SYSOUT ausgibt. Standardmäßig stehen in den auszugebenden Dateien Sätze variabler Länge. Es können aber auch Dateien mit Sätzen fester Länge ausgegeben werden. Bei den auszugebenden ISAM-Dateien ist der ISAM-Schlüssel im Standardfall acht Byte lang. Er kann aber auch kürzer sein. Das Kommando soll folgendes Format haben:

TYPE-FILE

NAME = <filename 1..54>

,ACCESS-METHOD = *ISAM(...) / *SAM

*ISAM(...)

  KEY-LENGTH = 8 / <integer 1..8>

,RECORD-SIZE = *VARIABLE / <integer 1..256>

Das Kommando wird mittels Prozedur implementiert. Die symbolischen Operanden stehen als Stellungsoperanden in der Operandenliste des BEGIN-PROCEDURE-Kommandos. In der Prozedur wird mit dem Dienstprogramm EDT gearbeitet. Die folgende Prozedur steht in der Datei $SDFUSR.TYPE.FILE:

/      BEGIN-PROCEDURE N,PARAM=YES(PROC-PARAM=(&FILE,&ACCESS,&KEY,&RECORD),- 
/      ESCAPE-CHARACTER='&') 
/      MODIFY-JOB-SWITCHES ON=(4,5) 
/      ASSIGN-SYSDTA TO-FILE=*SYSCMD 
/      CREATE-JV JV=RECORD-SIZE 
/      MODIFY-JV JV=RECORD-SIZE,VALUE='&RECORD' 
/      LOAD-PROGRAM FROM-FILE=$EDT 
/      SKIP-COMMAND TO-LABEL=&ACCESS   "ACCESS IST ISAM ODER SAM" 
/.SAM SKIP-COMMANDS TO-LABEL=SAM1,IF=JV(COND=(RECORD-SIZE='VARIABLE')) 
/      SET-FILE-LINK LINK-NAME=EDTSAM,FILE-NAME=&FILE,ACCES-METHOD=SAM,- 
/      RECORD-FORMAT=FIXED(REC-SIZE=&RECORD) 
/.SAM1 RESUME-PROGRAM 
@      READ '&FILE' 
/      HOLD-PROGRAM 
/      SKIP-COMMANDS TO-LABEL=COMMON,IF=JV(COND=(RECORD-SIZE='VARIABLE')) 
/      REMOVE-FILE-LINK LINK-NAME=EDTSAM 
/      SKIP-COMMANDS TO-LABEL=COMMON 
/.ISAM CREATE-JV JV=ISAM-KEY 
/      MODIFY-JV JV=ISAM-KEY,VALUE='&KEY' 
/      SKIP-COMMANDS TO-LABEL=ISAM3,IF=JV(COND=(ISAM-KEY='8' AND - 
/      RECORD-SIZE='VARIABLE')) 
/      SKIP-COMMANDS TO-LABEL=ISAM1,IF=JV(COND=(ISAM-KEY='8')) 
/      SKIP-COMMANDS TO-LABEL=ISAM2,IF=JV(COND=(RECORD-SIZE='VARIABLE')) 
/      SET-FILE-LINK LINK-NAME=EDTISAM,FILE-NAME=&FILE,ACCESS-METHOD=- 
/      ISAM(KEY-LEN=&KEY,KEY-POS=1),RECORD-FORMAT=FIXED(REC-SIZE=&RECORD) 
/      SKIP-COMMANDS TO-LABEL=ISAM3 
/.ISAM1 SET-FILE-LINK LINK-NAME=EDTISAM,FILE-NAME=&FILE,ACCES-METHOD=- 
/      ISAM(KEY-LEN=8,KEY-POS=1),RECORD-FORMAT=FIXED(REC-SIZE=&RECORD) 
/      SKIP-COMMANDS TO-LABEL=ISAM3 
/.ISAM2 SET-FILE-LINK LINK-NAME=EDTISAM,FILE-NAME=&FILE,ACCES-METHOD=- 
/      ISAM(KEY-LEN=&KEY) 
/.ISAM3 RESUME-PROGRAM 
@      GET '&FILE' 
/      HOLD-PROGRAM 
/      SKIP-COMMANDS TO-LABEL=ISAM4,IF=JV(COND=(ISAM-KEY='8' AND - 
/      RECORD-SIZE='VARIABLE')) 
/      REMOVE-FILE-LINK LINK-NAME=EDTISAM 
/.ISAM4 DELETE-JV JV=ISAM-KEY 
/.COMMON RESUME-PROGRAM 
@      PRINT %.-$N 
@      HALT 
/      SET-JOB-STEP 
/      DELETE-JV JV=RECORD-SIZE 
/      ASSIGN-SYSDTA TO-FILE=*PRIMARY 
/      MODIFY-JOB-SWITCHES OFF=(4,5) 
/      END-PROCEDURE 

Das Kommando TYPE-FILE wird in der Benutzersyntaxdatei SDF.USER.SYNTAX definiert. Anschließend wird es getestet.

/set-logon-parameters sdfusr,... ——————————————————————————————————————  (1)
 .
 .
/mod-sdf-opt synt-file=*remove(*std) ——————————————————————————————————  (2)
/start-sdf-a ——————————————————————————————————————————————————————————  (3)
%  BLS0517 MODULE 'SDAMAIN' LOADED
%  SDA0001 'SDF-A' VERSION '04.1E10' STARTED
%//open-syntax-file sdf.user.syntax ———————————————————————————————————  (4)
%//set-globals cont=*new ——————————————————————————————————————————————  (5)
%//add-cmd type-file,help=e('Outputs the contents of an ISAM or SAM -
%//file to SYSOUT.'),domain=user,impl=*proc('$sdfusr.type.file') ——————  (6)
%//add-oper name,help=e('Name of file to be output'),res-oper-nam=*pos(1) (7)
%//add-value *filename ————————————————————————————————————————————————  (8)
%//add-oper access-method,def='isam',res-oper-name=*pos(2) ————————————  (9)

                                                                                       

(1)

Unter der Benutzerkennung SDFUSR wird eine Task gestartet.

(2)

Die bei der LOGON-Verarbeitung automatisch aktivierte Benutzersyntaxdatei SDF.USER.SYNTAX wird deaktiviert.

(3)

SDF-A wird geladen und gestartet.

(4)

Die bereits existierende Benutzersyntaxdatei SDF.USER.SYNTAX wird eröffnet.

(5)

In der Globalinformation wird festgelegt, dass das Fortsetzungszeichen „-“ für Folgezeilen bei Eingabe von SYSCMD in Spalte 2 bis 72 stehen kann.

(6)

Der Kopf des Kommandos TYPE-FILE wird definiert. Es erhält einen englischen Hilfetext und wird dem Anwendungsbereich USER zugeordnet. Es ist mittels der Prozedur implementiert, die in der Datei $SDFUSR.TYPE.FILE steht.

(7)

Der erste Operand des Kommandos TYPE-FILE wird definiert. Sein Name ist NAME. Er erhält einen englischen Hilfetext. In dem an die Prozedur zu übergebenden String steht er an erster Position.

(8)

Es wird definiert, dass der Wert des Operanden NAME vom Datentyp FILENAME sein muss.

(9)

Der zweite Operand des Kommandos TYPE-FILE wird definiert. Sein Name ist ACCESS-METHOD. Sein Default-Wert ist ISAM. In dem an die Prozedur zu übergebenden String steht er an zweiter Position.

%//add-value *keyw,struct=*y,value='isam' ————————————————————————————— (10)
%//add-oper key-length,def='8',res-oper-name=*pos(3) —————————————————— (11)
%//add-value *integ(1,8) —————————————————————————————————————————————— (12)
%//close-struct ——————————————————————————————————————————————————————— (13)
%//add-value *keyw,value='sam' ———————————————————————————————————————— (14)
%//add-oper record-size,def='variable',res-oper-name=*pos(4) —————————— (15)
%//add-value *keyw,value='variable' ——————————————————————————————————— (16)
%//add-value *integ(1,256) ———————————————————————————————————————————— (17)
%//close-cmd —————————————————————————————————————————————————————————— (18)

                                                                                       

(10)

Es wird definiert, dass das Schlüsselwort ISAM ein zulässiger Wert des Operanden ACCESS-METHOD ist. ISAM leitet eine Struktur ein.

(11)

Der erste Operand in der Struktur ISAM wird definiert. Sein Name ist KEY-LENGTH. Sein Default-Wert ist die Ganzzahl 8. In dem an die Prozedur zu übergebenden String steht er an dritter Position.

(12)

Es wird definiert, dass der Wert des Operanden KEY-LENGTH vom Datentyp INTEGER sein muss. Als untere Schranke wird 1 und als obere 8 definiert.

(13)

Die gerade bearbeitete Struktur ISAM wird geschlossen.

(14)

Es wird definiert, dass das Schlüsselwort SAM ein zulässiger Wert des Operanden ACCESS-METHOD ist.

(15)

Der dritte Operand des Kommandos TYPE-FILE wird definiert. Sein Name ist RECORD-SIZE. Sein Default-Wert ist VARIABLE. In dem an die Prozedur zu übergebenden String steht er an vierter Position.

(16)

Es wird definiert, dass das Schlüsselwort VARIABLE ein zulässiger Wert des Operanden RECORD-SIZE ist.

(17)

Es wird definiert, dass der Wert des Operanden RECORD-SIZE vom Datentyp INTEGER sein kann. Als untere Grenze wird 1 und als obere 256 definiert.

(18)

Die Definition des Kommandos TYPE-FILE wird beendet.

%//show *com(type-f),siz=*max ————————————————————————————————————————— (19)
TYPE-FILE

     Outputs the contents of an ISAM or SAM file to SYSOUT.
     NAME =
          filename_1..54
          Name of file to be output
     ACCESS-METHOD = *ISAM
          *ISAM() or *SAM
          STRUCTURE: *ISAM
               KEY-LENGTH = 8
                    integer_1..8
     RECORD-SIZE = *VARIABLE
          *VARIABLE or integer_1..256
%//end
/type-file demo.1 ————————————————————————————————————————————————————— (20)
%  CMD0186 OPERATION NAME 'TYPE-FILE' UNKNOWN
/mod-sdf-opt synt-file=*add(*std) ————————————————————————————————————— (21)
/type-f demo.1 ———————————————————————————————————————————————————————— (22)
Contents of ISAM file DEMO.1

 .
 .
/type-f demo.2,rec-siz=52
Contents of ISAM file DEMO.2

 .
 .
/type-f demo.3,isam(6)
Contents of ISAM file DEMO.3

 .
 .

                                                                                       

(19)

Die in der Benutzersyntaxdatei SDF.USER.SYNTAX erstellte Definition des Kommandos TYPE-FILE wird in der ausführlichsten Form ausgegeben. Für FILENAME hat SDF-A standardmäßig eine minimale Länge von 1 und eine maximale von 54 Zeichen festgesetzt.

(20)

SDF lehnt das Kommando TYPE-FILE ab, da es in keiner aktivierten Syntaxdatei definiert ist.

(21)

Die Benutzersyntaxdatei SDF.USER.SYNTAX wird aktiviert.

(22)

Verschiedene ISAM-Dateien werden mit dem Kommando TYPE-FILE ausgegeben:

DEMO.1:

der ISAM-Schlüssel ist 8 Byte lang, die Satzlänge ist variabel

DEMO.2:

der ISAM-Schlüssel ist 8 Byte lang, die Sätze sind 52 Byte lang

DEMO.3:

der ISAM-Schlüssel ist 6 Byte lang, die Satzlänge ist variabel

/type-f demo.4,sam,rec-siz=60 ————————————————————————————————————————— (23)
Contents of SAM file DEMO.4

 .
 .
/type-f? —————————————————————————————————————————————————————————————— (24)

                                                                                       

(23)

Die SAM-Datei DEMO.4 wird mit dem Kommando TYPE-FILE ausgegeben. Sie hat eine feste Satzlänge von 60 Byte.

(24)

Für die Eingabe des Kommandos TYPE-FILE wird in den temporär geführten Dialog gewechselt.

Über die Operanden NAME und RECORD-SIZE werden weitere Informationen angefordert.

Contents of ISAM file DEMO.5

 .
 .
/exit-job

Es wird angegeben, dass der Name der auszugebenden Datei demo.5 ist und dass die Sätze eine feste Länge von 55 Byte haben. Die Zugriffsmethode *ISAM(KEY-LENGTH=8) ist der Default-Wert und deshalb schon voreingestellt.

Anschließend wird das Kommando ausgeführt. Nach der Kommandoausführung wird die Task beendet.