Page 1 of 1
Rexx or SAS or Easytrive
Posted: Tue Mar 03, 2020 9:54 pm
by chavinash2004
Hi All,
I have a file with all EXEC statements. Now the requirement is to read the all the statements and write a report as below:
affinity | sub program | File| Queue
Example of input file:
EXEC CICS
LINK PROGRAM('AAAAAA')
END-EXEC
EXEC CICS LINK PROGRAM('AAAAAA')
END-EXEC
EXEC CICS LINK
PROGRAM ('AAAAAA')
END-EXEC
OUTPUT:
affinity | sub program | File| Queue
LINK | AAAAAA | NA | NA
I did not find any easiest way to do this.
Please help me to complete this assignment.
Thanks,
Avinash
[ Post made via Android ]
Re: Rexx or SAS or Easytrive
Posted: Wed Mar 04, 2020 12:33 pm
by chavinash2004
Thank you enrico.
My apologize for not providing the complete example.
Here is the input file:
Code: Select all
AAAAAAAA | EXEC CICS
AAAAAAAA | LINK
AAAAAAAA | PROGRAM(WS-INVOKED-PGM)
AAAAAAAA | COMMAREA(API-COMMAREA)
AAAAAAAA | RESP (CICS-RESP)
AAAAAAAA | END-EXEC.
AAAAAAAA | EXEC CICS WRITE
AAAAAAAA | FILE (WS-LOG-FILE)
AAAAAAAA | FROM (WS-LOG-RECORD)
AAAAAAAA | LENGTH (LENGTH OF WS-LOG-RECORD)
AAAAAAAA | RIDFLD (WS-RBA)
AAAAAAAA | RBA
AAAAAAAA | RESP (CICS-RESP)
AAAAAAAA | END-EXEC.
AAAAAAAA | EXEC CICS WRITEQ TD
AAAAAAAA | QUEUE ('CSMT')
AAAAAAAA | FROM (WS-CSMT-AREA)
AAAAAAAA | NOHANDLE
AAAAAAAA | END-EXEC.
BBBBBBBB | EXEC CICS LINK PROGRAM ('XXXXXXXX' )
BBBBBBBB | COMMAREA (DSA-COMMAREA )
BBBBBBBB | LENGTH (DSA-COMMAREA-LENGTH)
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READQ TS QUEUE (TSQ2-WSD )
BBBBBBBB | INTO (TSQ-AREA )
BBBBBBBB | LENGTH (TSQ-LEN )
BBBBBBBB | ITEM (TSQ-ITEM )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READQ TS
BBBBBBBB | QUEUE (WRK-WSD )
BBBBBBBB | INTO (WRK-AREA )
BBBBBBBB | LENGTH (LENGTH OF WRK-AREA)
BBBBBBBB | ITEM (WRK-ITEM )
BBBBBBBB | END-EXEC
BBBBBBBB | EXEC CICS READ INTO (XXXX )
BBBBBBBB | LENGTH (REC-LEN )
BBBBBBBB | DATASET (CURR-FILE )
BBBBBBBB | RIDFLD (REC-KEY )
BBBBBBBB | RESP (WS-RESP )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS STARTBR KEYLENGTH (KEY-LEN )
BBBBBBBB | DATASET (CURR-FILE )
BBBBBBBB | RIDFLD (REC-KEY )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READNEXT INTO (CP01 )
BBBBBBBB | DATASET (CURR-FILE )
BBBBBBBB | RIDFLD (REC-KEY )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS ENDBR
BBBBBBBB | DATASET(CURR-FILE)
BBBBBBBB | END-EXEC
BBBBBBBB | EXEC CICS INQUIRE FILE (CURR-FILE )
BBBBBBBB | DSNAME (CURR-DSN )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS INQUIRE FILE (CURR-FILE )
BBBBBBBB | DSNAME (CURR-DSN )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READQ TS QUEUE (TSQ2-WAD )
BBBBBBBB | INTO (TSQ-AREA )
BBBBBBBB | LENGTH (TSQ-LEN )
BBBBBBBB | ITEM (TSQ-ITEM )
BBBBBBBB | END-EXEC.
CCCCCCCC | EXEC CICS LINK
CCCCCCCC | PROGRAM (ID-PROGRAM)
CCCCCCCC | COMMAREA (ID-COMMAREA)
CCCCCCCC | LENGTH (ID-COMMAREA-LENGTH)
CCCCCCCC | END-EXEC.
CCCCCCCC | EXEC CICS WRITE
CCCCCCCC | FILE ('FILE1')
CCCCCCCC | FROM (FILE1-DSA)
CCCCCCCC | LENGTH (FILE1-LENGTH)
CCCCCCCC | RIDFLD (FILE1-RELATIVE-BYTE)
CCCCCCCC | RBA
CCCCCCCC | END-EXEC.
DDDDDDDD | EXEC CICS XCTL
DDDDDDDD | PROGRAM ('YYYYYYYY')
DDDDDDDD | COMMAREA (DFHCOMMAREA)
DDDDDDDD | LENGTH (WS-SUB)
DDDDDDDD | NOHANDLE
DDDDDDDD | END-EXEC.
EEEEEEEE | EXEC CICS XCTL PROGRAM (AV-XCTL-PGM)
EEEEEEEE | COMMAREA (CA-COMMAREA)
EEEEEEEE | LENGTH (IMS-COMM-FP-LEN)
EEEEEEEE | END-EXEC.
Expected Output:
Code: Select all
Program | Command | Sub program | FILE NAME | QUEUE NAME |
AAAAAAAA | LINK | WS-INVOKED-PGM | NA | NA |
AAAAAAAA | WRITE | NA | WS-LOG-FILE | NA |
AAAAAAAA | WRITEQ TD | NA | NA | CSMT |
BBBBBBBB | LINK | XXXXXXXX | NA | NA |
BBBBBBBB | READQ TS | NA | NA | TSQ2-WSD |
BBBBBBBB | READQ TS | NA | NA | WRK-WSD |
BBBBBBBB | READ | NA | CURR-FILE | NA |
BBBBBBBB | STARTBR | NA | CURR-FILE | NA |
BBBBBBBB | READNEXT | NA | CURR-FILE | NA |
BBBBBBBB | ENDBR | NA | CURR-FILE | NA |
BBBBBBBB | INQUIRE | NA | CURR-FILE | NA |
BBBBBBBB | INQUIRE | NA | CURR-FILE | NA |
BBBBBBBB | READQ TS | NA | NA | TSQ2-WAD |
CCCCCCCC | LINK | ID-PROGRAM | NA | NA |
CCCCCCCC | WRITE | NA | FILE1 | NA |
DDDDDDDD | XCTL | YYYYYYYY | NA | NA |
EEEEEEEE | XCTL | AV-XCTL-PGM | NA | NA |
Thanks in advance.
coded to show the proper spacing ...
the output data was clobberd anyway
Re: Rexx or SAS or Easytrive
Posted: Wed Mar 04, 2020 3:25 pm
by nicc
Please use the code tags for presenting data.
What has the topic title to do with your "question" as posted?
What have you tried? You have been given a clue as to how to do it in Rexx so what is your problem?
Remember - we do not read minds and we do not do your work for you although we may help to fix it.
Re: Rexx or SAS or Easytrive
Posted: Wed Mar 04, 2020 6:54 pm
by chavinash2004
Thanks a lot enrico.
I will try this code and let you know.
I'm very new to rexx and this is my 2nd assignment in rexx. I did not an idea how to start this. Thanks again.
Have a great day ahead:).
Re: Rexx or SAS or Easytrive
Posted: Wed Mar 04, 2020 6:56 pm
by chavinash2004
Thank you Nic. From now i will add code tags and will make sure to add appropriate subject line.
Re: Rexx or SAS or Easytrive
Posted: Thu Mar 05, 2020 12:56 pm
by chavinash2004
Hi Enrico,
Code is not working for "scenario 2" since the code is checking for "when wordpos( word( exec, 3), "LINK XCTL" ) > 0".
also in "Scenario 1" the parse logic (parse value(space(exec,0)) with . "PROGRAM(" iden ")" .) is not working.
Code: Select all
Scenario 1:
000020 BBBBBBBB | EXEC CICS LINK PROGRAM ('XXXXXXXX' )
Scenario 2:
000001 AAAAAAAA | EXEC CICS
000002 AAAAAAAA | LINK
000003 AAAAAAAA | PROGRAM(WS-INVOKED-PGM)
I got some idea by looking at your code. Thanks again for this. I'm trying to find the issue and fix it.
Hi Nic,
I have used the code tags. Hope this is fine please let me now if i miss any thing else.
Thank you.
Re: Rexx or SAS or Easytrive
Posted: Thu Mar 05, 2020 3:14 pm
by chavinash2004
Hi Enrico,
I observed after the below logic i.e., line num 31 it's directly moving to Otherwise condition. so i have commented the code line 30 & 31 after that also it's not working.
I'm not sure if i miss something here.
Code: Select all
000026 when left( tail, 9 ) = "EXEC CICS" then do
000027 exec = space( exec tail )
000028 end
000029
000030 when left( tail, 8) = "END-EXEC" then do
000031 exec = space( exec tail )
My complete code(same as you provided):
Code: Select all
000001 do i = 1 to data.0
000002 exec = ""; iden = ""; line = ""
000003
000004 work = translate( data.i, " ", "'")
000005 work = translate( work )
000006 work = space( work )
000007
000008 parse var work head "|" tail
000009 head = strip( head )
000010 line = head "|"
000011
000012 tail = strip( tail )
000013
000014 line = head "|"
000015 say ' line : ' line
000016 say ' tail1: ' tail
000017 p = pos("(", tail )
000018 say ' p : ' p
000019 do while p > 0
000020 tail = left( tail, p-1) || substr( tail, p+1)
000021 p = pos( "(", tail )
000022 end
000023
000024 select
000025
000026 when left( tail, 9 ) = "EXEC CICS" then do
000027 exec = space( exec tail )
000028 end
000029
000030 when left( tail, 8) = "END-EXEC" then do
000031 exec = space( exec tail )
000032
000033 select
000034 when wordpos( word( exec, 3), "LINK XCTL" ) > 0 then do
000035 line = line word( exec, 3) "|"
000036 parse value(space(exec,0)) with . "PROGRAM(" iden ")" .
000037 line = line iden "|" "NA" "|" "NA" "|"
000038 end
000039
000040 when wordpos( word( exec, 3), "WRITE READ INQUIRE STARTBR ENDBR READNEXT" ) > 0 then do
000041 line = line word( exec, 3) "|"
000042 parse value(space(exec,0)) with . "FILE(" iden ")"
000043 if iden = "" then ,
000044 parse value(space(exec,0)) with . "DATASET(" iden ")" .
000045 line = line "NA" "|" iden "|" "NA" "|"
000046 end
000047
000048 when wordpos( word( exec, 3), "READQ WRITEQ" ) > 0 then do
000049 line = line word( exec, 3)
000050 line = line word( exec, 4) "|"
000051 parse value(space(exec,0)) with . "QUEUE(" iden ")" .
000052 line = line "NA" "|" "NA" "|" iden "|"
000053 end
000054
000055 otherwise do
000056 line = line "NA" "|" "NA" "|" "NA" "|"
000057 end
000058 end
000059
000060 say line
000061 exec = ""; iden = ""; line = ""
000062
000063 end
000064 otherwise do
000065 exec = space( exec tail )
000066 say ' exec : ' exec
000067 end
000068
000069 end
000070
000071 end
Input:
Code: Select all
AAAAAAAA | EXEC CICS
AAAAAAAA | LINK
AAAAAAAA | PROGRAM(WS-INVOKED-PGM)
AAAAAAAA | COMMAREA(API-COMMAREA)
AAAAAAAA | RESP (CICS-RESP)
AAAAAAAA | END-EXEC.
AAAAAAAA | EXEC CICS WRITE
AAAAAAAA | FILE (WS-LOG-FILE)
AAAAAAAA | FROM (WS-LOG-RECORD)
AAAAAAAA | LENGTH (LENGTH OF WS-LOG-RECORD)
AAAAAAAA | RIDFLD (WS-RBA)
AAAAAAAA | RBA
AAAAAAAA | RESP (CICS-RESP)
AAAAAAAA | END-EXEC.
AAAAAAAA | EXEC CICS WRITEQ TD
AAAAAAAA | QUEUE ('CSMT')
AAAAAAAA | FROM (WS-CSMT-AREA)
AAAAAAAA | NOHANDLE
AAAAAAAA | END-EXEC.
BBBBBBBB | EXEC CICS LINK PROGRAM ('XXXXXXXX' )
BBBBBBBB | COMMAREA (DSA-COMMAREA )
BBBBBBBB | LENGTH (DSA-COMMAREA-LENGTH)
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READQ TS QUEUE (TSQ2-WSD )
BBBBBBBB | INTO (TSQ-AREA )
BBBBBBBB | LENGTH (TSQ-LEN )
BBBBBBBB | ITEM (TSQ-ITEM )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READQ TS
BBBBBBBB | QUEUE (WRK-WSD )
BBBBBBBB | INTO (WRK-AREA )
BBBBBBBB | LENGTH (LENGTH OF WRK-AREA)
BBBBBBBB | ITEM (WRK-ITEM )
BBBBBBBB | END-EXEC
BBBBBBBB | EXEC CICS READ INTO (XXXX )
BBBBBBBB | LENGTH (REC-LEN )
BBBBBBBB | DATASET (CURR-FILE )
BBBBBBBB | RIDFLD (REC-KEY )
BBBBBBBB | RESP (WS-RESP )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS STARTBR KEYLENGTH (KEY-LEN )
BBBBBBBB | DATASET (CURR-FILE )
BBBBBBBB | RIDFLD (REC-KEY )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READNEXT INTO (CP01 )
BBBBBBBB | DATASET (CURR-FILE )
BBBBBBBB | RIDFLD (REC-KEY )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS ENDBR
BBBBBBBB | DATASET(CURR-FILE)
BBBBBBBB | END-EXEC
BBBBBBBB | EXEC CICS INQUIRE FILE (CURR-FILE )
BBBBBBBB | DSNAME (CURR-DSN )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS INQUIRE FILE (CURR-FILE )
BBBBBBBB | DSNAME (CURR-DSN )
BBBBBBBB | END-EXEC.
BBBBBBBB | EXEC CICS READQ TS QUEUE (TSQ2-WAD )
BBBBBBBB | INTO (TSQ-AREA )
BBBBBBBB | LENGTH (TSQ-LEN )
BBBBBBBB | ITEM (TSQ-ITEM )
BBBBBBBB | END-EXEC.
CCCCCCCC | EXEC CICS LINK
CCCCCCCC | PROGRAM (ID-PROGRAM)
CCCCCCCC | COMMAREA (ID-COMMAREA)
CCCCCCCC | LENGTH (ID-COMMAREA-LENGTH)
CCCCCCCC | END-EXEC.
CCCCCCCC | EXEC CICS WRITE
CCCCCCCC | FILE ('FILE1')
CCCCCCCC | FROM (FILE1-DSA)
CCCCCCCC | LENGTH (FILE1-LENGTH)
CCCCCCCC | RIDFLD (FILE1-RELATIVE-BYTE)
CCCCCCCC | RBA
CCCCCCCC | END-EXEC.
DDDDDDDD | EXEC CICS XCTL
DDDDDDDD | PROGRAM ('YYYYYYYY')
DDDDDDDD | COMMAREA (DFHCOMMAREA)
DDDDDDDD | LENGTH (WS-SUB)
DDDDDDDD | NOHANDLE
DDDDDDDD | END-EXEC.
EEEEEEEE | EXEC CICS XCTL PROGRAM (AV-XCTL-PGM)
EEEEEEEE | COMMAREA (CA-COMMAREA)
EEEEEEEE | LENGTH (IMS-COMM-FP-LEN)
EEEEEEEE | END-EXEC.
Output:
Code: Select all
AAAAAAAA | NA | NA | NA |
AAAAAAAA | NA | NA | NA |
AAAAAAAA | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
BBBBBBBB | NA | NA | NA |
CCCCCCCC | NA | NA | NA |
CCCCCCCC | NA | NA | NA |
DDDDDDDD | NA | NA | NA |
EEEEEEEE | NA | NA | NA |
Re: Rexx or SAS or Easytrive
Posted: Thu Mar 05, 2020 5:59 pm
by chavinash2004
Now it's working. I'm new to REXX so trying to understand the code how it works and did not noticed it.
Thanks a lot Enrico for helping me on this.
Re: Rexx or SAS or Easytrive
Posted: Mon Mar 30, 2020 7:22 pm
by chavinash2004
Hi Enrico/All,
I'm facing the issue if we have "EXEC CICS" & "END-EXEC" are on same line.
Example 1:
Input:
Code: Select all
AAAAAAA | EXEC CICS RETURN END-EXEC.
AAAAAAA | EXEC CICS LINK
AAAAAAA | PROGRAM (WS-LOG-PRG)
AAAAAAA | COMMAREA (WS-LNK-ERROR)
AAAAAAA | LENGTH (LENGTH OF WS-LNK-ERROR)
AAAAAAA | RESP (CICS-RESP)
AAAAAAA | END-EXEC.
Example 2:
Input:
Code: Select all
AAAAAAA | EXEC CICS RETURN
AAAAAAA | END-EXEC.
AAAAAAA | EXEC CICS LINK
AAAAAAA | PROGRAM (WS-LOG-PRG)
AAAAAAA | COMMAREA (WS-LNK-ERROR)
AAAAAAA | LENGTH (LENGTH OF WS-LNK-ERROR)
AAAAAAA | RESP (CICS-RESP)
AAAAAAA | END-EXEC.
In case of example 1 output is blank but output should similar to example 2.
example 2 output:
Code: Select all
AAAAAAA | LINK PROGRAM | WS-LOG-PRG
I'm able to understand that is because, we are checking for first 8 position for END-EXEC but not able to fix it.
Code: Select all
when left( tail, 9 ) = "EXEC CICS" then do
exec = space( exec tail )
end
when left( tail, 8) = "END-EXEC" then do
exec = space( exec tail )
Can you please help me to fix this.
Re: Rexx or SAS or Easytrive
Posted: Wed Apr 01, 2020 2:12 pm
by chavinash2004
I'm not clear with all possible scenarios initially when i post this requirement. I will take care of this in future when requesting for some help. My sincere apologize for this.
I have used this tool for many programs later i noticed this issue.
Please help me when you have free time.
Thanks for your help.
Take care.