我正在尝试执行以下操作:
1)在PDS中搜索字符串的成员。 2)用上面提到的字符串排除成员并获得成员列表。
我想使用JCL或任何其他大型机工具或实用程序来执行此操作。
感谢任何帮助。
答案 0 :(得分:3)
我认为您正在寻找ISPF Search-For utility,也可能是executed in batch。
您还可以在ISPF成员列表屏幕上使用SRCHFOR命令,然后按提示列排序,该列指示哪些成员匹配。
答案 1 :(得分:3)
这可能有更好的方法,但这对你有用。 复制以下JCL并替换:
不包含 string-to-search-for 的PDS成员列表将列在DD 列表下, 您可以在适当的地方重定向。
第一个作业步骤(SEARCH)调用ISPF SEARCHFOR实用程序,以识别包含该字符串的所有PDS成员。 第二步(LSTPDS)调用TSO LISTDS实用程序列出PDS的所有成员。第三步(REXXPGM)写了一点 REXX程序到临时PDS以便在下一步中使用。最后一步(LSTMBR)运行REXX过程以构建LISTING数据集 并删除沿途构建的临时文件。
如果一个人足够聪明,我认为ICETOOL可能会取代最后的两个步骤(但是到底是什么......实际上我确实找到了一个更好的过程,在此之后看到下一个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)
/*
关键是提供给ISRSUPC的LNFMTO
参数。此参数告诉ISRSUPC仅列出其中的成员
找不到搜索字符串。究竟是什么要求。下一步就是
格式化上一步的结果。不包含搜索的成员列表
字符串列在SYSOUT
中,可以根据需要重定向。
答案 2 :(得分:2)
另一种方法:将整个PDS以未排序的顺序“打”成“平面”文件;将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
/*
之后,使用SORT:
的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 =(WHEN = GROUP然后用于标记与它们所属的成员名称匹配的每个数据行,并且成员名称本身将被赋予空白成员名称。
JOINKEYS然后匹配成员名称键。来自INA通过JNF1CNTL的所有那些不匹配的是那些不包含搜索字符串的成员。这两个文件都需要排序,默认情况下会对每个JOINKEYS语句进行排序。
这适用于DFSORT。使用SyncSort,它将取决于您的安装是否支持JNFnCNTL文件(您必须尝试它,它没有记录)。如果您没有JNFnCNTL支持,则需要两个先前的单独步骤来提取数据。