免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4523 | 回复: 8

[分享]可以删除一个lib下所有文件的cl程序! [复制链接]

论坛徽章:
0
发表于 2006-05-22 18:40 |显示全部楼层
最近在做报表查询程序。每次查询结果都生成临时文件在一个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/viewthr ... 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

论坛徽章:
0
发表于 2006-05-23 09:20 |显示全部楼层
不错,收了。

论坛徽章:
0
发表于 2006-05-23 13:11 |显示全部楼层
不是很理解楼主的用法,从标题《可以删除一个LIB下所有文件的CL程序》来看,个人有2个观点:

1、查询结果都生成临时文件在一个lib,这个LIB可以使用QTEMP吧,这样你退出400后,这些文件自然自动消失;

2、400有个命令,CLRLIB LIB(MYLIB)可以直接清除MYLIB下所有东东,这个跟楼主的要求有什么差别吗?

论坛徽章:
0
发表于 2006-05-23 13:17 |显示全部楼层
想得到某个library下面的所有文件名,最快的方法是用qsys2/systables,没必要做转换。

论坛徽章:
0
发表于 2006-05-23 13:26 |显示全部楼层
原帖由 ewmiscc 于 2006-5-23 13:17 发表
想得到某个library下面的所有文件名,最快的方法是用qsys2/systables,没必要做转换。

我也补充一下,如果想得到400里面所有的PF/LF的OBJECT,最完善的办法是用QSYS/QADBXREF。


                          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

论坛徽章:
0
发表于 2006-05-23 15:34 |显示全部楼层
不明白楼主为何这样做!既然是临时的,全部用QTEMP来做不就行了么?

论坛徽章:
0
发表于 2006-05-23 17:50 |显示全部楼层
我觉得是否必须要放到QTEMP不应该是我们讨论的重点.....

我觉得对新手比较有用的是思路,大多CLP都是通过CMD将结果输出到PF中,然后通过读取PF中的内容以达到想要的目的....

对于想学CLP的朋友应该是很有用处的,这可以说是一个最简单的CLP的样本了

不过LZ的书写习惯还是很好的,注释写的很清楚..........

论坛徽章:
0
发表于 2006-05-23 18:00 |显示全部楼层
原帖由 qingzhou 于 2006-5-23 13:11 发表
不是很理解楼主的用法,从标题《可以删除一个LIB下所有文件的CL程序》来看,个人有2个观点:

1、查询结果都生成临时文件在一个lib,这个LIB可以使用QTEMP吧,这样你退出400后,这些文件自然自动消失;

2、4 ...

郁闷!公司的网一天都上不去。。。
自己也有精华贴了。。

1、因为我选择的方式不是5250的方式,所以不是结束交互作业退出的。。所以。。。
2、clrlib,看完帖子才知道的   。我学习了半年了,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

真是很高兴能看到其它的方法!

论坛徽章:
0
发表于 2008-12-09 11:11 |显示全部楼层
原帖由 sunokla 于 2006-5-23 18:00 发表

郁闷!公司的网一天都上不去。。。
自己也有精华贴了。。

1、因为我选择的方式不是5250的方式,所以不是结束交互作业退出的。。所以。。。
2、clrlib,看完帖子才知道的   。我学习了半年了 ...



请问这个方法能行得通嘛?

我个人现在觉得WRKACTJOB *PRINT来取JOB的值是行不通的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP