免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8095 | 回复: 16
打印 上一主题 下一主题

AS/400开发经验点滴(二):一个批量修改文件属性的工具 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-05 21:10 |只看该作者 |倒序浏览
AS/400开发经验点滴(二)

四.一个批量修改文件属性的工具

AS/400上的每个文件都带有大量的属性,文件的属性是在创建文件的时候指定的。在实际应用过程中,可能会需要改变这些文件属性。以PF文件为例,我们可能需要修改文件的Member Size,Maximum Members,Maximum record wait time等等。修改物理文件(PF)属性命令是CHGPF,修改逻辑文件(LF)命令是 CHGLF,遗憾的是这些命令一次只能修改一个文件。如果假设有一个库,库下面有几千个物理文件需要一次性统一修改文件属性,那该怎么办?AS/400并没有提供这样的命令。

我做了一个工具命令,可以实现对一个库下的所有文件属性进行批量修改,下面以修改文件Reuse deleted records属性为例来介绍这个工具命令,并附带全部源码。文件Reuse deleted records属性是表示记录在文件物理空间内被插入的方式,缺省情况下Reuse deleted records属性为*NO,这表示新记录将追加到文件尾部,如果Reuse deleted records属性修改为*YES,这表示物理文件中原已删除记录物理空间可以重复使用,当有新记录要加入时,系统会优先把新记录插入到原已删除记录空间里,只有当所有被删除记录空间都被重新使用后,新加记录才会从文件尾部开始追加。这个属性对于文件记录非常多、重整所费时间很长的情况下,还是很有用的。

制作修改一个库下所有文件属性的思路是首先应把该库下的所有物理文件名取出来,然后才能循环一个个地修改。以下是主要步骤:

1.        提取某库下所有物理文件名

这主要是通过利用DSPFD来实现的。该命令是用来显示文件描述(File Description)的,它可以一次显示一个库下的一文件描述,也可以一次显示一个库下的所有文件描述。可以在OUTPUT选项里填入*OUTFILE,并在OUTFILE选项里填入接收文件名,就可以把DSPFD的显示内容输出到一个临时PF文件中。该临时文件就包含有文件名字段ATFILE以及库名字段ATLIB。例如下面DSPFD命令就是把定义某库下的所有物理文件名及其基本属性(*BASATR)输出到QGPL库下的 TEMPLIBF文件里:

  1. DCL        VAR(&CALIB) TYPE(*CHAR) LEN(10)  /*定义一个库名变量*/

  2. DSPFD      FILE(&CALIB/*ALL) TYPE(*BASATR) +  
  3.              OUTPUT(*OUTFILE) FILEATR(*PF) +  
  4.              OUTFILE(QGPL/TEMPLIBF)      
复制代码


2.        对包含有文件名的临时文件进行加工

其实因为上面已经把文件名输出到了一个PF文件里,所以这一步可不要。但为了查看方便,我还是把文件名从TEMPLIBF中提出写入到一个更简单的PF文件中。先创建一个名为DTAFNAME的物理文件,如下:

  1. A          R DTANAM            
  2. A            FILNAM                                 10A    /*PF文件名*/
  3. A            FILLIB                           10A    /*库名*/
复制代码

再用CRTSRCPF命令在QGPL库下建一个CHGTEST源文件目录,在该文件下创建一个SQL脚本文本文件CHGLIBAF,其内容为:

INSERT INTO DTAFNAME
SELECT ATFILE,ATLIB FROM QGPL/TEMPLIBF

然后在CL程序中,用RUNSQLSTM命令运行SQL脚本文件中的SQL语句:

RUNSQLSTM  SRCFILE(QGPL/CHGTEST) SRCMBR(CHGLIBAF)      

这样就把文件名及库名从复杂的TEMPLIBF文件倒入到简单的DTAFNAME文件中
                     
3.        循环修改文件属性

循环读DTAFNAME文件,取出文件名,就可以一个个地用CHGPF命令修改文件属性了。

下面是完整的源代码:

文件名:CHGLIBFACL (CLLE)
  1. /*===================================================================*/
  2. /*       PROGRAM NAME: CHGLIBFACL                                       */
  3. /*       DESCRIPTION   :                                                    */
  4. /*       PROGRAMMER  : BLOG LIOU                                        */
  5. /*       DATE           :                                                    */
  6. /*===================================================================*/
  7.              PGM        PARM(&CALIB &REUSED)                           
  8.                                                                        
  9.              DCLF       FILE(DTAFNAME) RCDFMT(DTANAM)                  
  10.              DCL        VAR(&CALIB) TYPE(*CHAR) LEN(10)               
  11.              DCL        VAR(&REUSED) TYPE(*CHAR) LEN(4)               
  12.                                                                        
  13.              CHKOBJ     OBJ(QGPL/TEMPLIBF) OBJTYPE(*FILE)         
  14.              MONMSG     MSGID(CPF9801)                                 
  15.              CLRPFM     FILE(QGPL/TEMPLIBF)                        
  16.              MONMSG     MSGID(CPF3142)                                 
  17.              DSPFD      FILE(&CALIB/*ALL) TYPE(*BASATR) +           
  18.                           OUTPUT(*OUTFILE) FILEATR(*PF) +           
  19.                           OUTFILE(QGPL/TEMPLIBF)               
  20.              CLRPFM     FILE(DTAFNAME)                              
  21.              RUNSQLSTM SRCFILE(QGPL/CHGTEST)
  22. SRCMBR(CHGLIBAF)
  23.                                                                     
  24. LOOP:       RCVF       RCDFMT(DTANAM)  /* Read a file record */   
  25.             MONMSG     MSGID(CPF0864) EXEC(GOTO EOF)               
  26.             CHGPF      FILE(&FILLIB/&FILNAM) WAITFILE(60) +        
  27.                          REUSEDLT(&REUSED)                        
  28.             GOTO       CMDLBL(LOOP)                              
  29.   
  30. EOF:        ENDPGM                             
复制代码
                  

命令文件:CHGLIBFA  (CMD)

  1. /*===================================================================*/
  2. /*       PROGRAM NAME   : CHGLIBFA                                   */
  3. /*       DESCRIPTION    :                                            */
  4. /*       PROGRAMMER     : BLOG LIOU                                  */
  5. /*       DATE           : 2003/11/20                                 */
  6. /*===================================================================*/
  7.              CMD        PROMPT('Change Database File Attribute')      
  8.              PARM       KWD(CHGLIB) TYPE(*NAME) LEN(10) +              
  9.                           PROMPT('Change Lib')                        
  10.              PARM       KWD(REUSEDLT) TYPE(*NAME) LEN(4) +            
  11.                           SPCVAL((*YES) (*NO)) PROMPT('Reused +        
  12.                           Delete Rows')     
复制代码

用命令CRTCMD CMD(CHGLIBFA) PGM(CHGLIBFACL)创建CHGLIBFA命令,执行CHGLIBFA,就可以输入库名修改该库下的所有文件的Reuse deleted records的属性了。只需要稍对程序进行修改就可以批量修改文件多个其他属性了。

论坛徽章:
0
2 [报告]
发表于 2003-12-06 09:51 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

很好 很好 继续继续~~~

论坛徽章:
0
3 [报告]
发表于 2003-12-08 10:07 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

太感谢了

论坛徽章:
0
4 [报告]
发表于 2003-12-08 11:38 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

谢谢,:)

论坛徽章:
0
5 [报告]
发表于 2003-12-08 16:24 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

我顶。。。。

论坛徽章:
0
6 [报告]
发表于 2003-12-09 17:01 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

不错,有帮助

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-12-10 13:17 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

原创精华
谢谢!
andrewleading_h 该用户已被删除
8 [报告]
发表于 2004-01-05 17:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
stephenxie2003 该用户已被删除
9 [报告]
发表于 2004-01-06 11:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2004-01-06 11:52 |只看该作者

AS/400开发经验点滴(二):一个批量修改文件属性的工具

这位前辈真堪称楷模!谢了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP