Reading a PS and printout a Report



IBM's Command List programming language & Restructured Extended Executor

Reading a PS and printout a Report

Postby MNevarez » Wed Oct 29, 2008 11:08 pm

Hello Everyone,

I was asked to take an existing report which is already written in Rexx and sort it according to there requirement. I've done some research and noticed that Rexx doesn't have a SORT function. I've tried a few things already out there (i.e. Bubble Sort's and so on) with no luck so I decided to use DFSORT to accomplish this via rexx. Which works great. Now I'm trying to read in the sorted file and print out a report.

Input File (Sample):
IM643367 EFIX000105 20080103 20080103 Baselined G01769 Simple Planned Perm 20080103
IM724307 EFIX000128 20080826 20080826 Baselined G03025 Simple Planned Perm 20080824
40760 APPS001117 20080202 20080202 Baselined GRRATL Simple Planned Perm 20080824
40760 APPS001398 20080202 20080202 Baselined G02382 Simple Planned Perm 20070419
40760 APPS001399 20080202 20080202 Baselined G09483 Simple Planned Perm 20071030
------------- -------------- ----------- ------------ ----------------- --------- -------- ---------------- -----------
(1) (2) (3) (4) (5) (6) (7) (8) (9)

1 = ccnbr, 2 = pknbr, 3 = pinsdte, 4 = ainsdte, 5 = pstatus, 6 = pcreator, 7 = pklvl, 8 = pkgtype, 9 = pkgcdte


Once I read in the input file, I want to be able to break down each field as a variable. Like you would do in COBOL when you define each field of the record.

I know I have to read a record, parse the record (where I got stuck), print report.

I'm just not sure how to accomplish this. Can anyone help with code example.
MNevarez
 
Posts: 8
Joined: Tue Sep 25, 2007 10:46 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Reading a PS and printout a Report

 

Re: Reading a PS and printout a Report

Postby MrSpock » Thu Oct 30, 2008 12:14 am

Presumably, even though your post doesn't show it, the data lines up into specific columns. To create tokens (variables) from specific columns:

/* REXX */
...
Do Forever
  "EXECIO 1 DISKR input"
  If rc <> 0 Then Leave
  Parse Pull record
  Parse Var record 1 ccnbr 10 pknbr 21 pinsdte 30 ainsdte,
    39 pstatus 49 pcreator,
    56 pklvl 71 pkgtype 76 pkgcdte .
End
"EXECIO 0 DISKR input (FINIS"
...
User avatar
MrSpock
Global moderator
 
Posts: 810
Joined: Wed Jun 06, 2007 9:37 pm
Location: Raleigh NC USA
Has thanked: 0 time
Been thanked: 2 times

Re: Reading a PS and printout a Report

Postby MNevarez » Thu Oct 30, 2008 1:00 am

MrSpock, Thank you for getting back to me. I thought my input file layout would stay formatted but that's another story. Not sure how to use the tabs yet.

This is the layout of my input file (S = starting position, L = length of field):
field1 S L field2 S L field3 S L field4 S L field5 S L field6 S L
CCNBR 1 12 PKNBR 11 10 PINSDTE 25 8 AINSDTE 34 8 PSTATUS 43 17 PCREATOR 61 8
field7 S L field8 S L field9 S L
PKGLVL 70 13 PKTYPE 81 14 pkgcdte 99 8

Question I have is, how do I reference the variables? Is the "record" being redefined by the variables? Does the "." after pkgcdte mean the end of record? Now what about when it comes to OUTPUT_RESULT?

Output_Result:
do ix=1 to ?
call Line_Counter
say left(ccnbr.ix,12),
left(pknbr.ix,10),
left(pinsdte,8),
left(ainsdte,8),
left(pstatus.xi,17),
left(pcreator.ix,8),
left(pklvl.ix,13),
left(pkgtype.ix,14),
left(pkgcdte.ix,8)
end
Return
MNevarez
 
Posts: 8
Joined: Tue Sep 25, 2007 10:46 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Reading a PS and printout a Report

Postby dick scherrer » Thu Oct 30, 2008 1:16 am

Hello,

I thought my input file layout would stay formatted but that's another story. Not sure how to use the tabs yet.
Notice how Mr Spock's reply is formatted as "Code". In the top line of the Reply panel is the "Code" bbTag.

Using this will preserve your alignment. You can Preview your post to make sure it appears as you want it to appear.
Hope this helps,
d.sch.
User avatar
dick scherrer
Global moderator
 
Posts: 6304
Joined: Sat Jun 09, 2007 8:58 am
Has thanked: 3 times
Been thanked: 91 times

Re: Reading a PS and printout a Report

Postby MNevarez » Fri Oct 31, 2008 2:14 am

If finally got some output but still having a few issues. What happening is the output record being printed is printing every other line instead of one after another. The other thing I would like to do is separate the report output from SYSTSPRT DD. I would like to print to something like REPORT DD.

OUTPUT SAMPLE:

READY
PROFILE PREFIX(G03131) /* please use this,*/
READY
/* specifying your userid*/
READY
%SORT110
Report CMN110 generated from subsystem: SUBNAME on: 30 Oct 2008 at: 15:24:56 Pag

Date Range FDATE2 to TDATE2
--------------------------
Work Request Number Report
--------------------------
Change Package Planned Actual Package
Control Nmbr Name Install Install Package Status Creator Package Lev
------------ ---------- -------- -------- ----------------- -------- -----------
IM643367 EFIX000105 20080103 20080103 Baselined G01769 Simple

IM671593 EFIX000106 20080324 20080324 Baselined G01769 Simple


Not to get off the subject...How do I keep the font format? For example courier new 10...

Here's what my code looks like:

/* REXX                                                               */
/* Mainline ********************************************************* */
                                                                       
/* Executes DFSORT - read in file created by CMN110 */                 
/*                                                                     
"FREE FI(SYSOUT SORTIN SORTOUT SYSIN SORTWK01)"                         
"ALLOC FI(SYSOUT)  DA(*)"                                               
"ALLOC FI(SORTIN)  DA('G03131.CHGMAN.CMN110.FILE') SHR REUSE"           
"ALLOC FI(SORTOUT) DA('G03131.CHGMAN.CMN110.SORTED') SHR REUSE"         
"ALLOC FI(SYSIN)   DA('G03131.CHGMAN.CTC(SRT110F)') SHR REUSE"         
"ALLOCATE FI(SORTWK01) NEW DELETE SPACE(15,10) CYLINDERS "             
ADDRESS LINKMVS ICEMAN                                                 
*/                                                                     
Do Forever                                                             
  "execio 1 diskr srtdfile"                                             
  If rc <> 0 then Leave                                                 
  Parse Pull record                                                     
  Parse Var record 1 ccnbr, 11 pknbr, 25 pinsdte, 34 ainsdte,           
                   43 pstatus, 61 pcreator, 70 pklevel, 81 pktype,     
                   99 pkcdte                                           
  call Output_Result                                             
                                               
End                                                                     
"execio 0 diskr srtdfile (FINIS"                                       
                                                                       
/* Subroutines ****************************************************** */
                                                                       
/* Initialize Variables */                                             
                                                                       
Init_Variables:                                                         
                                                                       
                                                                       
  /* set page counter variables */                                     
                                                                       
  linect = 99 /* expire the line counter to force headings on page 1 */
  lines  = 50 /* print 50 data lines per page */                       
  pagect = 0  /* page counter */                                       
                                                                       
return                                                                 
                                                                       
/* print report header */                                               
                                                                       
Report_Header:                                                         
 say 'Report CMN110 generated from subsystem:',                         
      subname 'on:' date() 'at:' time() 'Page:' pagect                 
 say ' '                                                               
 say 'Date Range' fdate2 'to' tdate2                                   
 say '--------------------------'                                       
 say 'Work Request Number Report'                                       
 say '--------------------------'                                       
 say 'Change      ',                                                   
     'Package   ',                                                     
     'Planned ',                                                       
     'Actual  ',                                                       
     '                 ',                                               
     'Package ',                                                       
     '             ',                                                   
     '              ',                                                 
     'Date Pkg'                                                         
 say 'Control Nmbr',                                                   
     'Name      ',                                                     
     'Install ',                                                       
     'Install ',                                                       
     'Package Status   ',                                               
     'Creator ',                                                       
     'Package Level',                                                   
     'Package Type  ',                                                 
     'Created '                                                         
 say '------------',                                                   
     '             ',                                                   
     '              ',                                                 
     'Date Pkg'                                                         
 say 'Control Nmbr',                                                   
     'Name      ',                                                     
     'Install ',                                                       
     'Install ',                                                       
     'Package Status   ',                                               
     'Creator ',                                                       
     'Package Level',                                                   
     'Package Type  ',                                                 
     'Created '                                                         
 say '------------',                                                   
     '----------',                                                     
     '--------',                                                       
     '--------',                                                       
     '-----------------',                                               
     '--------',                                                       
     '-------------',                                                   
     '--------------',                                                 
     '--------'                                                         
Return                                                                 
                                                                       
/* increment line counter and throw header */                           
                                                                       
Line_Counter:                                                           
 if linect > lines then  /* if line count expired print headings */     
   do                                                                   
     pagect = pagect + 1                                               
     linect = 0                                                         
     call Report_Header                                                 
   end                                                                 
 else                    /* if not then increment the counter */       
   linect = linect + 1                                                 
Return                                                                 
                                                                       
/* print out result line */                                             
                                                                       
Output_Result:                                                         
    call Line_Counter
    say left(srtdfile,133)                                                   
Return                                                                 
                                                                     
Exit                                                                   


Any help would be greatly appreciated.
MNevarez
 
Posts: 8
Joined: Tue Sep 25, 2007 10:46 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Reading a PS and printout a Report

Postby MNevarez » Fri Oct 31, 2008 2:16 am

Never mind about figuring out how to keep the format. It seems you have to click on CODE button.
MNevarez
 
Posts: 8
Joined: Tue Sep 25, 2007 10:46 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Reading a PS and printout a Report

Postby dick scherrer » Fri Oct 31, 2008 3:02 am

Yup ;)

d
User avatar
dick scherrer
Global moderator
 
Posts: 6304
Joined: Sat Jun 09, 2007 8:58 am
Has thanked: 3 times
Been thanked: 91 times

Re: Reading a PS and printout a Report

Postby santlou » Fri Oct 31, 2008 4:50 pm

"The other thing I would like to do is separate the report output from SYSTSPRT DD. I would like to print to something like REPORT DD."

To do this, replace the "Say" instructions with file i/o commands. The "Say" statements are like "Display" stmts in cobol - they write to the default sysout.

So, just like in cobol, you would Open a an output file:

"Alloc DD(Report) Da(....) ... New Catalog"


In your Report_Header and Output_Result routines, change the Say stmts to "Queue" instructions.

Output_Result:                                                         
    call Line_Counter
/*    say left(srtdfile,133) */     
    queue left(srtdfile,133)                                             
Return   

Then, you use the Execio to write the Queued data to the Report File:

"Execio "Queued()" Diskw Report (finis"

The Execio shown above will write the entire stack to the Report DD.

You can also invoke the Execio for each line of output rather than waiting until the end of your process to write the entire stack, but that will decrease the performance. I find it better to write the entire stack.
santlou
 
Posts: 15
Joined: Sat Aug 23, 2008 8:06 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Reading a PS and printout a Report

Postby MNevarez » Fri Oct 31, 2008 7:07 pm

Santlou,

Thank You, that worked great. One thing did occur. I would have thought that the output would have been sorted! My input file is. Take a look below. It's sorted by ccnbr (that would be first column).
[b]IM643367[/b]     EFIX000105 20080103 20080103 Baselined         G01769   Simple     
[b]IM671593[/b]     EFIX000106 20080324 20080324 Baselined         G01769   Simple     
[b]IM671593[/b]     EFIX000108 20080324 20080324 Baselined         G01769   Simple     
[b]IM677036[/b]     EFIX000114 20080414 20080414 Baselined         GRNORT   Simple     
[b]IM692873[/b]     EFIX000116 20080520 20080520 Baselined         GKBROO   Simple     
[b]IM724307[/b]     EFIX000128 20080826 20080826 Baselined         G03025   Simple     
[b]40760   [/b]        APPS001117 20080202 20080202 Baselined         GRRATL   Simple     
[b]40760   [/b]        APPS001398 20080202 20080202 Baselined         G02382   Simple     


Report Output
Report CMN110 generated from subsystem: SUBNAME on: 31 Oct 2008 at: 08:18:31 Pag
                                                                               
Date Range FDATE2 to TDATE2                                                     
--------------------------                                                     
Work Request Number Report                                                     
--------------------------                                                     
Change       Package    Planned  Actual                     Package             
Control Nmbr Name       Install  Install  Package Status    Creator  Package Lev
------------ ---------- -------- -------- ----------------- -------- -----------
40760        APPS001467 20080202 20080202 Baselined         G03970   Simple     
41220        FAST000659 20080110 20080110 Baselined         GANELS   Simple     
IM677036     EFIX000114 20080414 20080414 Baselined         GRNORT   Simple     
41356        FAST000673 20080115 20080115 Baselined         GANELS   Simple     


Also I'm still trying to figure out how the PARSE VAR works. I thought when you define it the way I have it below the it kind of works like in COBOL. SRTDFILE is the record, CCNBR, 11 PKNBR, 25 PINSDTE, and so on redefines or breaks the record into fields that I can manipulate.

Parse Var srtdfile ccnbr, 11 pknbr, 25 pinsdte, 34 ainsdte,           
                 43 pstatus, 61 pcreator, 70 pklevel, 84 pktype,     
                 99 pkcdte .       


Any help with this would be greatly appreciated.
MNevarez
 
Posts: 8
Joined: Tue Sep 25, 2007 10:46 pm
Has thanked: 0 time
Been thanked: 0 time


Return to CLIST & REXX

 


  • Related topics
    Replies
    Views
    Last post