Well... I got curious and ran a benchmark... I did not do 2800 members, but here is the code and what I ended up with...
Drum roll please...
PDSIO1 - 44 members in
OPSROZ.GEM.NEW in 0.019329 seconds
PDSIO2 - 44 members in
OPSROZ.GEM.NEW in 0.669946 seconds
PDSIO3 - 44 members in
OPSROZ.GEM.NEW in 1.286039 seconds
PDSIO4 - 44 members in
OPSROZ.GEM.NEW in 0.274897 seconds
What they do:
PDSIO1 - Basic LMMLIST and print member - no lines - for comparison
PDSIO2 - LMMLIST and ALLOC/EXECIO/FREE print number of lines - 2ND Place
PDSIO3 - LMMLIST/VIEW/.ZLAST Edit Macro print number of lines - 3RD Place
PDSIO4 - LMMSTATS DELETE/LMMSTATS/LMMLIST print number of lines - WINNER
Here is the code so you can try it yourself with your own PDS.
Sorry about the line numbers, I lose the indentation if I don't do it that way...
000001 /* rexx - PDSIO1 - basic LMMLIST and print member */
000002 x = time('r')
000003 arg dsn pat
000004 if pat = '' then pat = '*'
000005 count = 0
000006 address ISPEXEC
000007 "LMINIT DATAID(PDS) DATASET('"dsn"') ENQ(SHR)"
000008 "LMOPEN DATAID("pds")"
000009 do forever
000010 "LMMLIST DATAID("pds") OPTION(LIST) STATS(NO)",
000011 "MEMBER(ZLMEMBER) PATTERN("pat")"
000012 if RC <> 0 then leave
000013 say zlmember
000014 count = count + 1
000015 end
000016 "LMMLIST DATAID("pds") OPTION(FREE)"
000017 "LMCLOSE DATAID("pds")"
000018 "LMFREE DATAID("pds")"
000019 say count 'members in' dsn 'in' time('e') 'seconds'
000001 /* rexx - PDSIO2 - LMMLIST and ALLOC/EXECIO/FREE */
000002 x = time('r')
000003 arg dsn pat
000004 if pat = '' then pat = '*'
000005 count = 0
000006 address ISPEXEC
000007 "LMINIT DATAID(PDS) DATASET('"dsn"') ENQ(SHR)"
000008 "LMOPEN DATAID("pds")"
000009 do forever
000010 "LMMLIST DATAID("pds") OPTION(LIST) STATS(NO)",
000011 "MEMBER(ZLMEMBER) PATTERN("pat")"
000012 if RC <> 0 then leave
000013 pdsmem = dsn'('strip(zlmember)')'
000014 address TSO "ALLOC F(MEM) DA('"pdsmem"') SHR REUSE"
000015 address TSO "EXECIO * DISKR MEM (STEM MEM. FINIS"
000016 address TSO "FREE F(MEM)"
000017 say left(zlmember,8) mem.0 'lines'
000018 count = count + 1
000019 end
000020 "LMMLIST DATAID("pds") OPTION(FREE)"
000021 "LMCLOSE DATAID("pds")"
000022 "LMFREE DATAID("pds")"
000023 say count 'members in' dsn 'in' time('e') 'seconds'
000001 /* rexx - PDSIO3 - LMMLIST/VIEW/.ZLAST */
000002 x = time('r')
000003 arg dsn pat
000004 if pat = '' then pat = '*'
000005 count = 0
000006 address ISPEXEC
000007 "LMINIT DATAID(PDS) DATASET('"dsn"') ENQ(SHR)"
000008 "LMOPEN DATAID("pds")"
000009 do forever
000010 "LMMLIST DATAID("pds") OPTION(LIST) STATS(NO)",
000011 "MEMBER(ZLMEMBER) PATTERN("pat")"
000012 if RC <> 0 then leave
000013 "VIEW DATAID("pds") MEMBER("strip(zlmember)") MACRO(@LAST)"
000014 count = count + 1
000015 end
000016 "LMMLIST DATAID("pds") OPTION(FREE)"
000017 "LMCLOSE DATAID("pds")"
000018 "LMFREE DATAID("pds")"
000019 say count 'members in' dsn 'in' time('e') 'seconds'
000001 /* rexx - @LAST edit macro */
000002 address ISREDIT
000003 "MACRO"
000004 "CURSOR = .ZLAST"
000005 "(LAST) = CURSOR"
000006 "(MEMBER) = MEMBER"
000007 say left(member,8) last 'lines'
000008 "END"
000009 exit(1)
000001 /* rexx - PDSIO4 - LMMSTATS DELETE/LMMSTATS/LMMLIST print member */
000002 x = time('r')
000003 arg dsn pat
000004 if pat = '' then pat = '*'
000005 count = 0
000006 address ISPEXEC
000007 "LMINIT DATAID(PDS) DATASET('"dsn"') ENQ(SHR)"
000008 "LMMSTATS DATAID("pds") MEMBER(*) DELETE"
000009 "LMMSTATS DATAID("pds") MEMBER(*)"
000010 "LMOPEN DATAID("pds")"
000011 do forever
000012 "LMMLIST DATAID("pds") OPTION(LIST) STATS(YES)",
000013 "MEMBER(ZLMEMBER) PATTERN("pat")"
000014 if RC <> 0 then leave
000015 say left(zlmember,8) right(zlcnorc,10)
000016 count = count + 1
000017 end
000018 "LMMLIST DATAID("pds") OPTION(FREE)"
000019 "LMCLOSE DATAID("pds")"
000020 "LMFREE DATAID("pds")"
000021 say count 'members in' dsn 'in' time('e') 'seconds'
JCL for all 4..
//jobcard
//***************************************************************
//* BATCH ISPF *
//***************************************************************
//MEMLIST PROC DSN=,MEM=*,NUM=
//PDSIO1 EXEC PGM=IKJEFT01,PARM='ISPSTART CMD(%PDSIO&NUM &DSN &MEM)'
//SYSEXEC DD DSN=your.EXEC,DISP=SHR
//ISPPLIB DD DSN=your.ISPPLIB,DISP=SHR
//ISPSLIB DD DSN=your.ISPSLIB,DISP=SHR
//ISPMLIB DD DSN=your.ISPMLIB,DISP=SHR
//ISPTLIB DD DDNAME=ISPTABL
// DD DSN=your.ISPTLIB,DISP=SHR
//ISPTABL DD DSN=your.ISPTLIB,DISP=SHR
//ISPTABL DD LIKE=your.ISPTLIB,UNIT=VIO,DSORG=PO
//ISPPROF DD LIKE=your.ISPTLIB,UNIT=VIO,DSORG=PO
//ISPLOG DD SYSOUT=*,RECFM=VA,LRECL=125
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
// PEND
//PDSIO1 EXEC MEMLIST,DSN=some.pds,MEM=*,NUM=1
//PDSIO2 EXEC MEMLIST,DSN=some.pds,MEM=*,NUM=2
//PDSIO3 EXEC MEMLIST,DSN=some.pds,MEM=*,NUM=3
//PDSIO4 EXEC MEMLIST,DSN=some.pds,MEM=*,NUM=4
Rob
-----Original Message-----
From: Ted MacNEIL <
eama...@YAHOO.CA>
To: TSO-REXX <
TSO-...@VM.MARIST.EDU>
Sent: Mon, Feb 6, 2012 12:23 pm
Subject: Re: LM facilities
Look up the service LMSTATS.
don't remember exactly, but I think it handles wild cards and can generate
tats for members that don't have them, including line counts -- it's been a
ong time since I used it.
-----Original Message------
rom: Bob Bridges
ender: TSO REXX Discussion List
o:
TSO-...@VM.MARIST.EDU
eplyTo: TSO REXX Discussion List
ubject: Re: [TSO-REXX] LM facilities
ent: 6 Feb 2012 11:42
Lisa suggested the Edit macro, too, but I'm assuming that it would take
onger to run even a quick Edit macro on 2800 members than it would to
imply do an EXECIO on each and check queued(). Comments?
I came up with another idea, but let me finish reading through all these
esponses before I propose it.
---
rench to pound in the correct screw. */
-----Original Message-----
rom: Mickey
ent: Sunday, February 5, 2012 01:23
I would use LM to pull the list a members and loop through it, but then I
ould call an edit macro (you can use these with VIEW), and get the line
umber of the last line using
Address 'ISPEXEC' 'ISREDIT MACRO'
ddress "ISREDIT'
(trash) = Linenum .ZLAST"
ddress 'ISPEXEC" "VPUT (TRASH)"
CANCEL"
--------------------------------------------------
rom: "Bob Bridges" <
rhb...@ATTGLOBAL.NET>
or TSO-REXX subscribe / signoff / archive access instructions,
ed MacNEIL
amac...@yahoo.ca
witter: @TedMacNEIL