最近在做报表查询程序。每次查询结果都生成临时文件在一个lib下。
程序中没控制查询完毕清除临时文件。所以想办法做了个cl程序加入作业调度里凌晨清除文件。
程序:
PGM
/*endpf 这个文件事先CRTPF,我指定长度300就可以了 */
DCLF FILE(SBGL/ENDPF)
DCL VAR(&PFNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&LEIXIN) TYPE(*CHAR) LEN(4)
DCL VAR(&SHUXIN) TYPE(*CHAR) LEN(2)
/*这里dsplib cl 命令 参数 output(*print) 生成spool file */
DSPLIB LIB(TEMPPF) OUTPUT(*PRINT)
/*先清除一下储存spool file信息的pf */
CLRPFM FILE(ENDPF)
/* 将DSPLIB LIB(TEMPPF) 生成的信息,也就是参数output(*)时在屏幕上显示的信息 cpy到endpf中*/
CPYSPLF FILE(QPDSPLIB) TOFILE(SBGL/ENDPF) +
CRTDATE(*LAST)
/*循环读取 */
BEGIN: RCVF RCDFMT(ENDPF)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END))
/*将每行信息存到本地数据区中 */
CHGDTAARA DTAARA(*LDA) VALUE(&ENDPF)
/*截取数据区相应的部分 ,这再不同应用中位置肯定不一样的。。。。,所以,确定位置时,debug一下,在上一步结束时,dspdtaara,然后。。。。。。。数吧*/
/*想获取的信息定义好。。。。。 */
RTVDTAARA DTAARA(*LDA (5 10)) RTNVAR(&PFNAME)
RTVDTAARA DTAARA(*LDA (18 4)) RTNVAR(&LEIXIN)
RTVDTAARA DTAARA(*LDA (27 2)) RTNVAR(&SHUXIN)
/*如果类型是 *file ......... */
IF COND(&LEIXIN = 'FILE') THEN(DO)
DLTF FILE(TEMPPF/&PFNAME)
ENDDO
GOTO CMDLBL(BEGIN)
END: ENDPGM
看到以前的帖子 :
http://bbs.chinaunix.net/viewthread.php?tid=664151&extra=&highlight=%C7%E5%B3%FDlib%CF%C2%CB%F9%D3%D0&page=1
感觉这种将各种cl 命令得到的结果"导"出来,再。。。很实用的。应该改改程序就可以实现其它效果的。
创建物理文件 (CRTPF)
入选择,并按“执行”键。
件 . . . . . . . . . . . . . FILE
库 . . . . . . . . . . . . . *CURLIB
文件 . . . . . . . . . . . . SRCFILE QDDSSRC
库 . . . . . . . . . . . . . *LIBL
成员 . . . . . . . . . . . . SRCMBR *FILE
录长度,如果没有 DDS . . . . RCDLEN 300 /*CRTPF ENDPF */
成严重性级别 . . . . . . . . GENLVL 20
记严重性级别 . . . . . . . . FLAG 0
件类型 . . . . . . . . . . . FILETYPE *DATA
员(如果需要的话) . . . . . MBR *FILE
户指定的 DBCS 数据 . . . . . IGCDTA *NO
本描述 . . . . . . . . . . . TEXT *SRCMBRTXT
pl421 回复于:2006-05-23 09:20:07
不错,收了。
qingzhou 回复于:2006-05-23 13:11:04
不是很理解楼主的用法,从标题《可以删除一个LIB下所有文件的CL程序》来看,个人有2个观点:
1、查询结果都生成临时文件在一个lib,这个LIB可以使用QTEMP吧,这样你退出400后,这些文件自然自动消失;
2、400有个命令,CLRLIB LIB(MYLIB)可以直接清除MYLIB下所有东东,这个跟楼主的要求有什么差别吗?
ewmiscc 回复于:2006-05-23 13:17:22
想得到某个library下面的所有文件名,最快的方法是用qsys2/systables,没必要做转换。
qingzhou 回复于:2006-05-23 13:26:04
引用:原帖由 ewmiscc 于 2006-5-23 13:17 发表
想得到某个library下面的所有文件名,最快的方法是用qsys2/systables,没必要做转换。
我也补充一下,如果想得到400里面所有的PF/LF的OBJECT,最完善的办法是用QSYS/QADBXREF。
:mrgreen::mrgreen::mrgreen:
Work with Objects Using PDM XXXXXXXX
Library . . . . . QSYS Position to . . . . . . . .
Position to type . . . . .
Type options, press Enter.
2=Change 3=Copy 4=Delete 5=Display 7=Rename
8=Display description 9=Save 10=Restore 11=Move ...
Opt Object Type Attribute Text
QADBXREF *FILE PF-DTA Cross reference physical file
Bottom
Parameters or command
===> RUNQRY *N QADBXREF
F3=Exit F4=Prompt F5=Refresh F6=Create
F9=Retrieve F10=Command entry F23=More options F24=More keys
leason 回复于:2006-05-23 15:34:39
不明白楼主为何这样做!既然是临时的,全部用QTEMP来做不就行了么?
xuguopeng 回复于:2006-05-23 17:50:29
我觉得是否必须要放到QTEMP不应该是我们讨论的重点.....
我觉得对新手比较有用的是思路,大多CLP都是通过CMD将结果输出到PF中,然后通过读取PF中的内容以达到想要的目的....
对于想学CLP的朋友应该是很有用处的,这可以说是一个最简单的CLP的样本了
不过LZ的书写习惯还是很好的,注释写的很清楚..........
sunokla 回复于:2006-05-23 18:00:46
引用:原帖由 qingzhou 于 2006-5-23 13:11 发表
不是很理解楼主的用法,从标题《可以删除一个LIB下所有文件的CL程序》来看,个人有2个观点:
1、查询结果都生成临时文件在一个lib,这个LIB可以使用QTEMP吧,这样你退出400后,这些文件自然自动消失;
2、4 ...
郁闷!公司的网一天都上不去。。。
自己也有精华贴了。。:em02:
1、因为我选择的方式不是5250的方式,所以不是结束交互作业退出的。。所以。。。
2、clrlib,看完帖子才知道的:em06: 。我学习了半年了,2个月前又在赶任务,所以真是见招拆招了。。
另一层意思是,觉得这种方法挺实用的。。。。。比如说我也作了一个结束用户作业的类似程序:
PGM PARM(&ENDUSR)
DCLF FILE(P_SUNLEI/ACTJOB)
DCL VAR(&ENDUSR) TYPE(*CHAR) LEN(10)
DCL VAR(&USRNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNAM) TYPE(*CHAR) LEN(10)
DCL VAR(&NUMBER) TYPE(*CHAR) LEN(6)
WRKACTJOB OUTPUT(*PRINT)
CLRPFM FILE(ACTJOB)
CPYSPLF FILE(QPDSPAJB) TOFILE(P_SUNLEI/ACTJOB) +
CRTDATE(*LAST)
BEGIN: RCVF RCDFMT(ACTJOB)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END))
CHGDTAARA DTAARA(*LDA) VALUE(&ACTJOB)
RTVDTAARA DTAARA(*LDA (18 10)) RTNVAR(&USRNAME)
RTVDTAARA DTAARA(*LDA (5 10)) RTNVAR(&JOBNAM)
RTVDTAARA DTAARA(*LDA (30 6)) RTNVAR(&NUMBER)
IF COND(&USRNAME=&ENDUSR) THEN(DO)
ENDJOB JOB(&NUMBER/&USRNAME/&JOBNAM) OPTION(*IMMED)
ENDDO
GOTO CMDLBL(BEGIN)
END: ENDPGM
真是很高兴能看到其它的方法!:mrgreen:
|