Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Auswählen und Verändern von Sätzen

&pagelevel(4)&pagelevel

Sätze können mit der selektiven SET-RECORD-MAPPING-Anweisung ausgewählt und verändert werden.

Für eine Ausgabedatei können mehrere ADD-FILE-LINK-Kommandos mit demselben Eröffnungsmodus und verschiedenen Dateikettungsnamen abgesetzt werden. Über diese Dateikettungsnamen werden dann die PERCON-Anweisungen zugeordnet. So werden Sätze mit SELECT-INPUT-RECORDS ausgewählt und mit SET-RECORD-MAPPING verändert. Die restlichen Sätze bleiben unverändert oder werden in anderer Weise verändert. Zu beachten sind die Unterschiede, wenn Ein- und Ausgabedatei identisch sind oder die Ausgabedatei neu zu erstellen ist.

Ein- und Ausgabedatei sind identisch

Bei SAM- bzw. ISAM-Dateien können für dieselbe Datei mehrere ADD-FILE-LINK-Kommandos mit OPEN-MODE=*UPDATE bzw. OPEN-MODE=*INOUT und verschiedenen Dateikettungsnamen abgesetzt werden. Bei identischer Ein- und Ausgabedatei bleibt die Satzanzahl dieser Datei unverändert. Werden Sätze über mehrere SELECT-INPUT-RECORDS-Anweisungen ausgewählt und über mehrere SET-RECORD-MAPPING-Anweisungen verändert, werden die Sätze entsprechend oft überschrieben. Nur die letzte Änderung bleibt bestehen.

Bei SAM-Dateien, die mit OPEN-MODE=*UPDATE geöffnet werden, ändert sich die Satzlänge nicht. Verlängerte Sätze werden auf ihre ursprüngliche Länge gekürzt; verkürzte Sätze mit dem FILLER-Zeichen der SET-RECORD-MAPPING-Anweisung auf ihre alte Länge gebracht.

/ADD-FILE-LINK FILE-NAME=INOUTFILE, LINK-NAME=PCIN1,  OPEN-MODE=*UPDATE
/ADD-FILE-LINK FILE-NAME=INOUTFILE, LINK-NAME=PCOUT1, OPEN-MODE=*UPDATE
/ADD-FILE-LINK FILE-NAME=INOUTFILE, LINK-NAME=PCOUT2, OPEN-MODE=*UPDATE
/ADD-FILE-LINK FILE-NAME=INOUTFILE, LINK-NAME=PCOUT3, OPEN-MODE=*UPDATE
/START-PERCON
%  PER0000 PERCON STARTED, VERSION V03.0A00
//ASSIGN-INPUT-FILE  LINK-NAME=PCIN1
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT1
//SELECT-INPUT-RECORDS -
//   OUTPUT-LINK-NAME=PCOUT1,-
//   CONDITION=((5,1)='A')
//SET-RECORD-MAPPING - &*———————————————————————————————————————————————  (1)
//   OUTPUT-LINK-NAME=PCOUT1,-
//   FILLER=*INPUT,-
//   OUTPUT-FIELDS=C'X'(OUTPUT-POSITION=5)
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT2
//SELECT-INPUT-RECORDS -
//   OUTPUT-LINK-NAME=PCOUT2,-
//   CONDITION=((5,1)='B')
//SET-RECORD-MAPPING - &*———————————————————————————————————————————————  (2)
//   OUTPUT-LINK-NAME=PCOUT2,-
//   FILLER=*INPUT,-
//   OUTPUT-FIELDS=C'Y'(OUTPUT-POSITION=5)
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT3
//SELECT-INPUT-RECORDS -
//   OUTPUT-LINK-NAME=PCOUT3,-
//   CONDITION=((6,1)<='2')
//SET-RECORD-MAPPING - &*———————————————————————————————————————————————  (3)
//   OUTPUT-LINK-NAME=PCOUT3,-
//   FILLER=*INPUT,-
//   OUTPUT-FIELDS=C'9'(OUTPUT-POSITION=6)
//END
%  PER0030 NUMBER OF PROCESSED RECORDS FOR LINK='PCIN1' 
           (FILE=:2OS6:$WKST.INOUTFILE):                   7
%  PER0030 NUMBER OF PROCESSED RECORDS FOR LINK='PCOUT1' 
           (FILE=:2OS6:$WKST.INOUTFILE):                   2
%  PER0030 NUMBER OF PROCESSED RECORDS FOR LINK='PCOUT2' 
           (FILE=:2OS6:$WKST.INOUTFILE):                   4
%  PER0030 NUMBER OF PROCESSED RECORDS FOR LINK='PCOUT3' 
           (FILE=:2OS6:$WKST.INOUTFILE):                   3
%  PER0031 PERCON TERMINATED NORMALLY 

(1)

In Spalte 5 wird ’A’ durch ’X’ ersetzt.

(2)

In Spalte 5 wird ’B’ durch ’Y’ ersetzt.

(3)

In Spalte 6 werden alle Zeichen ≤ ’2’ durch ’9’ ersetzt.

Datei
vorher:
Datei
nachher:
A0 *A9
B1 *B9
B2 *B9
B3Y3
A4X4
C5C5
B6Y6

* Die Änderungen durch (1) und (2) bleiben wegen (3) unberücksichtigt.

Bei ISAM-Dateien kann es zu unerwünschten Schleifen kommen, wenn

  • der Satzschlüssel verändert wird,

  • mit DUPLICATE-KEY=*YES gearbeitet wird,

  • der ausgegebene Satz vor dem eingelesenen Satz liegt, da die Schreibposition die nächste Leseposition festlegt.

Ein- und Ausgabedatei verschieden

Bei ISAM- bzw. UPAM-Dateien können für dieselbe Ausgabedatei mehrere ADD-FILE-LINK-Kommandos mit OPEN-MODE=*OUTPUT bzw. OPEN-MODE=*OUTIN und verschiedenen Dateikettungsnamen abgesetzt werden.

Die Anzahl der Ausgabesätze kann sich reduzieren, wenn keine Eingabesätze durch eine SELECT-INPUT-RECORDS-Anweisung ausgewählt wurden. Sie kann sich erhöhen, wenn Eingabesätze durch mehrere SELECT-INPUT-RECORDS-Anweisungen ausgewählt wurden.

Wird bei ISAM-Dateien DUPLICATE-KEY=*YES angegeben, kann ein Eingabesatz in mehrere Ausgabesätze aufgespalten werden.

Bei folgendem Beispiel wurde die Datei INPUTFILE mit den Eigenschaften ACCESS-METHOD=ISAM, RECORD-FORMAT=*VARIABLE, KEY-POSITION=5, KEY-LENGTH=8 angelegt.

/ADD-FILE-LINK -
/   FILE-NAME=INPUTFILE,-
/   LINK-NAME=PCIN1,-
/   OPEN-MODE=*INPUT
/CREATE-FILE FILE-NAME=OUTPUTFILE
/ADD-FILE-LINK -
/   FILE-NAME=OUTPUTFILE,-
/   LINK-NAME=PCOUT1,-
/   OPEN-MODE=*OUTPUT,-
/   ACCESS-METHOD=*ISAM,-
/   SUPPORT=*DISK(ISAM-ATTRIBUTES=(DUPLICATE-KEY=*YES))
/ADD-FILE-LINK -
/   FILE-NAME=OUTPUTFILE,-
/   LINK-NAME=PCOUT2,-
/   OPEN-MODE=*OUTPUT,-
/   ACCESS-METHOD=*ISAM,-
/   SUPPORT=*DISK(ISAM-ATTRIBUTES=(DUPLICATE-KEY=*YES))
/ADD-FILE-LINK -
/   FILE-NAME=OUTPUTFILE,-
/   LINK-NAME=PCOUT3,-
/   OPEN-MODE=*OUTPUT,-
/   ACCESS-METHOD=*ISAM,-
/   SUPPORT=*DISK(ISAM-ATTRIBUTES=(DUPLICATE-KEY=*YES))
/START-PERCON
//ASSIGN-INPUT-FILE -
//   LINK-NAME=PCIN1
//ASSIGN-OUTPUT-FILE -
//   LINK-NAME=PCOUT1,-
//   FILE=*DISK-FILE(FILE-ATTRIBUTES=*INPUT-FILE)
//SELECT-INPUT-RECORDS -
//   OUTPUT-LINK-NAME=PCOUT1,-
//   CONDITION=((13,1)='A')
//SET-RECORD-MAPPING -
//   OUTPUT-LINK-NAME=PCOUT1,-
//   FILLER=*INPUT,-
//   OUTPUT-FIELDS=C'X'(OUTPUT-POSITION=13)
//ASSIGN-OUTPUT-FILE -
//   LINK-NAME=PCOUT2,-
//   FILE=*DISK-FILE(FILE-ATTRIBUTES=*INPUT-FILE)
//SELECT-INPUT-RECORDS -
//   OUTPUT-LINK-NAME=PCOUT2,-
//   CONDITION=((13,1)='B')
//SET-RECORD-MAPPING -
//   OUTPUT-LINK-NAME=PCOUT2,-
//   FILLER=*INPUT,-
//   OUTPUT-FIELDS=C'Y'(OUTPUT-POSITION=13)//ASSIGN-OUTPUT-FILE -
//   LINK-NAME=PCOUT3,-
//   FILE=*DISK-FILE(FILE-ATTRIBUTES=*INPUT-FILE)
//SELECT-INPUT-RECORDS -
//   OUTPUT-LINK-NAME=PCOUT3,-
//   CONDITION=((14,1)<='2')
//SET-RECORD-MAPPING -
//   OUTPUT-LINK-NAME=PCOUT3,-
//   FILLER=*INPUT,-
//   OUTPUT-FIELDS=C'9'(OUTPUT-POSITION=14)
//END

INPUTFILEOUTPUTFILE
(1)00000001A000000001X0
(1)00000002B100000001A9
(1)00000003B200000002Y1

00000004B300000002B9

00000005A400000003Y2
(2)00000006C500000003B9

00000007B600000004Y3


00000005X4


00000007Y6

(1)

Diese Sätze werden jeweils durch die erste und dritte bzw. zweite und dritte SELECT-INPUT-RECORDS-Anweisung ausgewählt und erscheinen deshalb zweimal in der OUTPUTFILE.

(2)

Dieser Satz wird durch keine SELECT-INPUT-RECORDS-Anweisung ausgewählt und erscheint deshalb nicht in der OUTPUTFILE.

Aufspalten eines Satzes

Soll ein Satz in drei kürzere Sätze aufgespalten werden, ist dazu eine Zwischendatei (BUFFERFILE) erforderlich. Da diese eine ISAM-Datei ist, wird ein Pseudoschlüssel (für alle Sätze ’1’ in Spalte 5) eingeführt. Bei der Weiterverarbeitung der Zwischendatei wird dieser Schlüssel ignoriert.

/ADD-FILE-LINK -
/   FILE-NAME=INPUTFILE,-
/   LINK-NAME=PCIN1,-
/   OPEN-MODE=*INPUT
/
/CREATE-FILE FILE-NAME=BUFFERFILE
/ADD-FILE-LINK -
/   FILE-NAME=BUFFERFILE,-
/   LINK-NAME=PCOUT1,-
/   OPEN-MODE=*OUTPUT,-
/   ACCESS-METHOD=*ISAM,-
/   SUPPORT=*DISK(ISAM-ATTRIBUTES=(DUPLICATE-KEY=*YES,-
/                                  KEY-LENGTH=1,-
/                                  KEY-POSITION=5))
/ADD-FILE-LINK -
/   FILE-NAME=BUFFERFILE,-
/   LINK-NAME=PCOUT2,-
/   OPEN-MODE=*OUTPUT,-
/   ACCESS-METHOD=*ISAM,-
/   SUPPORT=*DISK(ISAM-ATTRIBUTES=(DUPLICATE-KEY=*YES,-
/                                  KEY-LENGTH=1,-
/                                  KEY-POSITION=5))
/ADD-FILE-LINK -
/   FILE-NAME=BUFFERFILE,-
/   LINK-NAME=PCOUT3,-
/   OPEN-MODE=*OUTPUT,-
/   ACCESS-METHOD=*ISAM,-
/   SUPPORT=*DISK(ISAM-ATTRIBUTES=(DUPLICATE-KEY=*YES,-
/                                  KEY-LENGTH=1,-
/                                  KEY-POSITION=5))
/ADD-FILE-LINK -
/   FILE-NAME=BUFFERFILE,-
/   LINK-NAME=PCIN2
/
/CREATE-FILE FILE-NAME=OUTPUTFILE
/ADD-FILE-LINK -
/   FILE-NAME=OUTPUTFILE,-
/   LINK-NAME=PCOUT4,-
/   ACCESS-METHOD=*SAM
/
/START-PERCON
//ASSIGN-INPUT-FILE LINK-NAME=PCIN1
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT1
//SET-RECORD-MAPPING -
//   OUTPUT-LINK-NAME=PCOUT1,-
//   OUTPUT-FIELDS=(C'1'(OUTPUT-POSITION=5),-
//                  *FIELD(INPUT-POSITION=5,-
//                         INPUT-LENGTH=2,-
//                         OUTPUT-POSITION=6))
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT2
//SET-RECORD-MAPPING -
//  OUTPUT-LINK-NAME=PCOUT2,-
//  OUTPUT-FIELDS=(C'1'(OUTPUT-POSITION=5),-
//                 *FIELD(INPUT-POSITION=7,-
//                        INPUT-LENGTH=2,-
//                        OUTPUT-POSITION=6))
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT3
//SET-RECORD-MAPPING -
//   OUTPUT-LINK-NAME=PCOUT3,-
//   OUTPUT-FIELDS=(C'1'(OUTPUT-POSITION=5),-
//                  *FIELD(INPUT-POSITION=9,-
//                         INPUT-LENGTH=2,-
//                         OUTPUT-POSITION=6))
//START-CONVERSION
//ASSIGN-INPUT-FILE  LINK-NAME=PCIN2
//ASSIGN-OUTPUT-FILE LINK-NAME=PCOUT4
//SET-RECORD-MAPPING -
//   OUTPUT-FIELDS=*FIELD(INPUT-POSITION=6,-
//                        INPUT-LENGTH=2,-
//                        OUTPUT-POSITION=5)
//END
INPUTFILE
(SAM):
BUFFERFILE
(ISAM):
OUTPUTFILE
(SAM):
S1S2S31S1S1
S4S5S61S2S2
S7S8S91S3S3

1S4S4

1S5S5

1S6S6

1S7S7

1S8S8

1S9S9