Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Selecting and updating records

&pagelevel(4)&pagelevel

Records can be selected and updated using the SET-RECORD-MAPPING statement.

In the case of output files, several ADD-FILE-LINK commands can be issued in the same open mode and with different link names. These link names are then used to assign the PERCON statements. In this way records are selected with SELECT-INPUT-RECORDS and updated with SET-RECORD-MAPPING. All other records remain unchanged unless they are updated in some other manner. There are certain differences when input and output file are identical or when a new output file has to be created.

Input file identical to output file

In the case of SAM or ISAM files, several ADD-FILE-LINK commands with OPEN-MODE=*UPDATE or OPEN-MODE=*INOUT and with different link names can be issued for the same file. When the input file and the output file are identical, the number of records in this file remains unchanged. If records are selected via several SELECT-INPUT-RECORDS statements and updated via several SET-RECORD-MAPPING statements, the records are overwritten as often as required. Only the last update version is retained.

In the case of SAM files opened with *OPEN-MODE=*UPDATE, the record length is not changed. Records which have been lengthened are shortened to their original length; records that have been truncated are extended to their original length by means of the filler character of the SET-RECORD-MAPPING statement.

/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 column 5, ’A’ is replaced by ’X’.

(2)

In column 5, ’B’ is replaced by ’Y’.

(3)

In column 6, all characters ≤ ’2’ are replaced by ’9’.

Old file:New file:
A0 *A9
B1 *B9
B2 *B9
B3Y3
A4X4
C5C5
B6Y6

* Because of (3), updates resulting from (1) and (2) are not taken into account.

In the case of ISAM files, loops may occur inadvertently

  • if the record key is changed

  • if DUPLICATE-KEY=*YES is specified

  • if the record which is output precedes the record which has been read in, since the write position defines the next read position.

Input file not identical to output file

With ISAM or UPAM files, several ADD-FILE-LINK commands with OPEN-
MODE=*OUTPUT or OPEN-MODE=*OUTIN and with different link names can be issued for the same output file.

The number of output records can be reduced if no input records have been selected by means of the SELECT-INPUT-RECORDS statement. By the same token, it can be increased if input records have been selected using more than one SELECT-INPUT-RECORDS statement.

With ISAM files, if DUPLICATE-KEY=*YES has been specified, an input record can be split up into more than one output record.

In the example below, the INPUTFILE has been created with the properties ACCESS-METHOD=ISAM, RECORD-FORMAT=*VARIABLE, KEY-POSITION=5, KEY-LENGTH=8.

/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)

The records are selected by the first and third SELECT-INPUT-RECORDS statement or by the second and third such statements, for which reason they appear twice in the output file.

(2)

This record is not selected by a SELECT-INPUT-RECORDS statement and therefore does not appear in the output file.

Splitting a record

If a record is split up into three shorter records, a buffer file is required. Since this buffer file is an ISAM file, a pseudo key is added (for all records ’1’ in column 5). When the buffer file is further processed, this key is ignored.

/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