我正在尝试执行以下操作:
1)pds搜索字符串的搜索成员。2)排除上述字符串的成员并获取成员列表。
我想使用JCL或任何其他大型机工具或实用程序进行此操作。
任何帮助都将不胜感激。
我认为您正在寻找iSPF搜索实用程序,也可以在批处理中执行。
您还可以在ISPF成员列表屏幕上使用SRCHFOR命令,然后按提示列进行排序,该列指示哪些成员具有匹配。
这样做可能有更好的方法,但这应该对您有用。复制以下JCL并替换:
- 您的工作卡所需的任何东西
- pds to-search 带有您要搜索的PD的名称
- temp-pds-name 带有有效的PDS名称,该名称不会复制您已经拥有的任何内容
- 字符串到搜索 - 带有您要搜索PDS成员的字符串
不包含字符串to-search-for 的PDS成员列表将在DD 列表中列出,您可以在适当的地方重定向。
第一个作业步骤(搜索)调用ISPF搜索实用程序,以确定所有包含字符串的PDS成员。第二步(LSTPDS)调用TSO Listds实用程序列出PDS的所有成员。第三步(REXXPGM)写一点REXX程序可用于下一步的临时PDS。最后一步(LSTMBR)运行REXX过程来构建列表数据集并删除沿途构建的临时文件。
如果一个人足够聪明,我认为冰et可以替换最后的两个步骤(但是到底...实际上我确实找到了一个更好的过程,请参阅下一个JCL)
)//LOOKFOR JOB your-job-card-info
//*====================================================================
//SEARCH EXEC PGM=ISRSUPC,PARM=(SRCHCMP,'ANYC')
//NEWDD DD DSN=pds-to-search,DISP=SHR
//OUTDD DD DSN=&&SRCH,DISP=(NEW,PASS,DELETE),
// AVGREC=K,
// SPACE=(133,(5,5)),
// DCB=(LRECL=133,BLKSIZE=133,RECFM=FB)
//SYSIN DD *
SRCHFOR 'string-to-search-for'
/*
//*====================================================================
//LSTPDS EXEC PGM=IKJEFT01
//SYSTSPRT DD DSN=&&MBRS,DISP=(NEW,PASS,DELETE),
// AVGREC=K,
// SPACE=(80,(5,5)),
// DCB=(LRECL=80,BLKSIZE=80,RECFM=FB)
//SYSTSIN DD *
LISTDS 'pds-to-search' MEMBERS
/*
//REXXPDS EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALLOCATE DSN('temp-pds-name') NEW KEEP -
DSORG(PO) RECFM(F,B) LRECL(80) -
AVGREC(U) SPACE(80,100) DIR(5) DSNTYPE(PDS)
/*
//*====================================================================
//REXXPGM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO INFILE(REXXPROG) OUTDATASET('temp-pds-name(MBRLIST)')
/*
//REXXPROG DD *
'EXECIO * DISKR SRCH(FINIS STEM X.'
FND = ''
DO I = 1 TO X.0
IF WORD(X.I, 3) = 'STRING(S)' THEN FND = FND WORD(X.I, 1)
END
DROP X.
'EXECIO * DISKR MBRS(FINIS STEM X.'
MBRS = 0
DO I = 1 TO X.0 - 2
IF MBRS & WORDPOS(WORD(X.I, 1), FND) = 0 THEN
QUEUE WORD(X.I,1)
ELSE
IF X.I = '--MEMBERS--' THEN MBRS = 1
END
'EXECIO * DISKW LISTING(FINIS'
RETURN
/*
//*====================================================================
//LISTMBR EXEC PGM=IKJEFT01,PARM=('%MBRLIST')
//SYSEXEC DD DSN=NXB123.JUNK,DISP=(OLD,DELETE,DELETE)
//SRCH DD DSN=&&SRCH,DISP=(OLD,DELETE,DELETE)
//MBRS DD DSN=&&MBRS,DISP=(OLD,DELETE,DELETE)
//LISTING DD SYSOUT=A
//SYSTSPRT DD SYSOUT=A
//SYSTSIN DD *
/*
//
这是一个更好的答案... 花了一段时间才能到达那里
//MYJOB JOB your-job-card-info
//SEARCH EXEC PGM=ISRSUPC,PARM=(SRCHCMP,'LNFMTO')
//NEWDD DD DSN=pds-to-search,DISP=SHR
//OUTDD DD DSN=&&SRCH,DISP=(NEW,PASS,DELETE),
// AVGREC=K,
// SPACE=(133,(5,5)),
// DCB=(LRECL=133,BLKSIZE=133,RECFM=FB)
//SYSIN DD *
SRCHFOR 'string-to-search-for'
/*
//STEP02 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTMSG DD SYSOUT=*
//SORTIN DD DSN=&&SRCH,DISP=(OLD,DELETE,DELETE)
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY -
INCLUDE COND=(30,6,CH,EQ,C' 0 ') -
OUTREC FIELDS=(1,8)
/*
关键是fed to ISRSUPC的LNFMTO
参数。此参数告诉ISRSUPC仅列出这些成员找不到搜索字符串。到底是什么。下一步只是格式化上一步的结果。不包含搜索的成员列表字符串在SYSOUT
中列出,可以在需要时重定向。
另一种方法:" punch"整个pds,按顺序不排序,将" flat"文件放在" flat"文件中;使用JoinKeys与使用SS准备的数据进行子弦,字段类型。
//PUNCHIT EXEC PGM=IEBPTPCH
//SYSUT1 DD DISP=SHR,DSN=your.pds
//SYSUT2 DD DSN=output.dataset,RECFM=FB,LRECL=81,otherstuffyouneed
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
PUNCH TYPORG=PO
/*
之后,使用排序的Joinkeys步骤:
//FINDMISS EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
JOINKEYS F1=INA,FIELDS=(1,8,A)
JOINKEYS F2=INB,FIELDS=(82,8,A)
JOIN UNPAIRED,F1,ONLY
/*
//JNF1CNTL DD *
INCLUDE COND=(2,13,CH,EQ,C'MEMBER NAME')
INREC BUILD=(15,8)
/*
//JNF2CNTL DD *
INCLUDE COND=(2,13,CH,EQ,C'MEMBER NAME',
OR,2,72,SS,EQ,C'yoursearchvalue')
INREC IFTHEN=(WHEN=GROUP,BEGIN=(2,13,CH,EQ,C'MEMBER NAME'),
PUSH=(82:15,8)),
IFTHEN=(WHEN=(2,13,CH,EQ,C'MEMBER NAME'),
OVERLAY=(82:8X))
/*
//INA DD DISP=SHR,DSN=YOUR.PUNCHED.FILE
//INB DD DISP=SHR,DSN=YOUR.PUNCHED.FILE (yes, exactly the same one)
然后处理打孔的文件,在同一步骤中读取两次,然后使用Joinkeys将文件从文件中"匹配"到文件中的另一个提取物。
在INA上通过JNF1CNTL提取所有成员名称。
在INB上通过JNF2CNTL提取所有成员名称,以及与所需搜索相匹配的所有数据线。ifthen =(当组= group时,然后用于标记与它们所属的成员名称匹配的每个数据行,并且会员名称本身将获得一个空白的成员名称。
然后,Joinkeys匹配会员名称键。所有不匹配的INA通过JNF1CNTL的人都是不包含搜索字符串的成员。两个文件都需要排序,默认情况下,每个Joinkeys语句。
这将与DFSort一起使用。使用Syncsort,将取决于您的安装是否支持JNFNCNTL文件(您必须尝试,未记录下来)。如果您没有JNFNCNTL支持,则需要两个较早的单独的步骤来提取数据。