On Thu, Mar 28, 2019 at 2:52 AM Elardus Engelbrecht <
elardus.engelbre...@sita.co.za> wrote:

> Hi to all,
>
> I've got a requirement where a single line in large dataset (RECFM=VB or
> FB and LRECL=<larger than 2048>) needs to be edited/changed in batch.
> Changed dataset is then to be used in next job steps.
>
> Sounds easy? Interactively with TSO yes, but they want it to be done in a
> batch job.
>
> Something like c '???' '!!!' which can be easily done interactively.
>
> I have a look at the different utilities. One utility I could find useful
> is the EDIT and CHANGE commands running under IKJEFT.
>
> Unfortunately those IKJEFT01 commands require that the dataset lines need
> to be numbered.
>
> I tried it out:
>
> READY
>   EDIT '??.TEST' OLD TEXT ASIS NONUM
> EDIT
>   CHANGE 1  2000     'ONE' 'TWO'
> IKJ52502I DATA SET NOT LINE NUMBERED
> EDIT
> END
>
> The IKJ52502I is not what I want. Is there a batch utility where I can
> edit a line in large dataset?
>
> I am very sure I am overlooking something obvious.
>
> Many thanks in advance.
>
> Groete / Greetings
> Elardus Engelbrecht
>
>
In my usual "left handed" way, I will recommend using "awk" in a UNIX step
to do this. It is easiest to do if you have Co:Z installed, but it can be
done using the IBM supplied UNIX commands. Yes, IBM awk can read a z/OS
sequential dataset. I have verified this on z/OS 1.12 and 2.3. Something
like:

//PS001   EXEC PGM=BPXBATCH,REGION=0M
//*PARM='SH printenv '
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
//STDIN    DD DUMMY
//STDPARM  DD *
SH awk 'NR <= 2000 {n=sub(/ONE/,"TWO");print;}
        NR > 2000 {n=sub(/./,"+");print  $0;}'
    "//'fully-qualified-input-dataset'" |
    cp /dev/fd/0 "//'existing-output-dataset'"
//STDENV DD *
/*
//

The above will change the _first_ occurance of "ONE" to "TWO" if the
relative record number is less than or equal to 2000 (NR <= 2000). It will
leave any other occurrences on the line alone. It will simply copy the
current record to the output for all other records (NR > 2000). It would be
easiest to do this if you preallocate the output dataset. Perhaps in a
previous IEFBR14 step. Yes, "cp" can create a new sequential dataset. It is
a PITA and I didn't want to bother with it.

-- 
I just burned 2000 calories!
That's the last time I'll nap with brownies in the oven.

Maranatha! <><
John McKown

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to