Page 1 of 1

Reading a PS and printout a Report

PostPosted: Wed Oct 29, 2008 11:08 pm
by MNevarez
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.

Re: Reading a PS and printout a Report

PostPosted: Thu Oct 30, 2008 12:14 am
by MrSpock
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"
...

Re: Reading a PS and printout a Report

PostPosted: Thu Oct 30, 2008 1:00 am
by MNevarez
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

Re: Reading a PS and printout a Report

PostPosted: Thu Oct 30, 2008 1:16 am
by dick scherrer
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.

Re: Reading a PS and printout a Report

PostPosted: Fri Oct 31, 2008 2:14 am
by MNevarez
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.

Re: Reading a PS and printout a Report

PostPosted: Fri Oct 31, 2008 2:16 am
by MNevarez
Never mind about figuring out how to keep the format. It seems you have to click on CODE button.

Re: Reading a PS and printout a Report

PostPosted: Fri Oct 31, 2008 3:02 am
by dick scherrer
Yup ;)

d

Re: Reading a PS and printout a Report

PostPosted: Fri Oct 31, 2008 4:50 pm
by santlou
"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.

Re: Reading a PS and printout a Report

PostPosted: Fri Oct 31, 2008 7:07 pm
by MNevarez
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.