`

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

阅读更多

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文件里:

[code:1:b3ca3ab88b]DCL VAR(&CALIB) TYPE(*CHAR) LEN(10) /*定义一个库名变量*/

DSPFD FILE(&CALIB/*ALL) TYPE(*BASATR) +

OUTPUT(*OUTFILE) FILEATR(*PF) +

OUTFILE(QGPL/TEMPLIBF) [/code:1:b3ca3ab88b]

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

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

[code:1:b3ca3ab88b]A R DTANAM

A FILNAM 10A /*PF文件名*/

A FILLIB 10A /*库名*/[/code:1:b3ca3ab88b]

再用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)

[code:1:b3ca3ab88b]/*===================================================================*/

/* PROGRAM NAME: CHGLIBFACL */

/* DESCRIPTION : */

/* PROGRAMMER : BLOG LIOU */

/* DATE : */

/*===================================================================*/

PGM PARM(&CALIB &REUSED)

DCLF FILE(DTAFNAME) RCDFMT(DTANAM)

DCL VAR(&CALIB) TYPE(*CHAR) LEN(10)

DCL VAR(&REUSED) TYPE(*CHAR) LEN(4)

CHKOBJ OBJ(QGPL/TEMPLIBF) OBJTYPE(*FILE)

MONMSG MSGID(CPF9801)

CLRPFM FILE(QGPL/TEMPLIBF)

MONMSG MSGID(CPF3142)

DSPFD FILE(&CALIB/*ALL) TYPE(*BASATR) +

OUTPUT(*OUTFILE) FILEATR(*PF) +

OUTFILE(QGPL/TEMPLIBF)

CLRPFM FILE(DTAFNAME)

RUNSQLSTM SRCFILE(QGPL/CHGTEST)

SRCMBR(CHGLIBAF)

LOOP: RCVF RCDFMT(DTANAM) /* Read a file record */

MONMSG MSGID(CPF0864) EXEC(GOTO EOF)

CHGPF FILE(&FILLIB/&FILNAM) WAITFILE(60) +

REUSEDLT(&REUSED)

GOTO CMDLBL(LOOP)

EOF: ENDPGM [/code:1:b3ca3ab88b]

命令文件:CHGLIBFA (CMD)

[code:1:b3ca3ab88b]

/*===================================================================*/

/* PROGRAM NAME : CHGLIBFA */

/* DESCRIPTION : */

/* PROGRAMMER : BLOG LIOU */

/* DATE : 2003/11/20 */

/*===================================================================*/

CMD PROMPT('Change Database File Attribute')

PARM KWD(CHGLIB) TYPE(*NAME) LEN(10) +

PROMPT('Change Lib')

PARM KWD(REUSEDLT) TYPE(*NAME) LEN(4) +

SPCVAL((*YES) (*NO)) PROMPT('Reused +

Delete Rows') [/code:1:b3ca3ab88b]

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

分享到:
评论

相关推荐

    AS/400开发经验点滴

    AS/400的开发涉及多种工具和语言,包括CL(Control Language)、RPG(Report Program Generator)、COBOL等。在AS/400的开发过程中,开发者需要处理各种类型的消息,例如错误消息、询问消息等。 询问消息(Inquiry ...

    AS400开发经验点滴

    ### AS400开发经验点滴 #### 一、AS/400系统介绍与环境配置 AS/400系统是一种高性能的企业级服务器系统,它主要用于处理大量的事务性数据和复杂的业务逻辑。AS/400系统具有稳定、可靠、高效等特点,在金融、制造、...

    基于51单片机设计的远程可控点滴预警系统.zip(毕设/大创/竞赛/立项/项目开发)

    本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明,项目具体内容可查看下方的资源详情。 【附带帮助】: 若还...

    点滴空间整站程序 v1.6

    总之,“点滴空间整站程序 v1.6”是一个为初学者和有一定经验的网站开发者设计的工具,提供了一个快速搭建和管理网站的基础框架,但安全性、性能优化以及定制化程度取决于用户的操作和进一步开发。

    Eclipse SWT开发点滴

    ### Eclipse SWT开发点滴 #### 一、第三方包的引用 在使用Eclipse进行SWT开发时,经常会遇到需要引入第三方库的情况。以下是引入第三方库的具体步骤: 1. **工程项目增加Libraries** - 右键点击项目 -> `Build ...

    日记工具 记录生活点滴

    综上所述,"日记工具 记录生活点滴"不仅是一个帮助用户记录日常的软件,还是一个结合了多种技术、注重用户体验和隐私保护的综合应用。开发者需要对软件工程的多个领域有所了解,才能打造出这样一个功能丰富且用户...

    自动点滴管理系统

    自动点滴管理系统是一款基于.NET 3.5框架,利用Windows Communication Foundation (WCF) 技术构建的应用程序。WCF是微软提供的一种全面的服务导向架构,用于构建高度互操作的、分布式系统。它允许应用程序在不同的...

    精彩编程与编程技巧-VB编程经验点滴...

    在 Visual Basic (VB) 编程中,`CommonDialog` 控件是一个非常有用的工具,用于打开文件对话框或颜色选择器等。如果想要同时展示多种类型的文件,比如文本文件和图片文件,可以通过设置 `Filter` 属性来实现。 - **...

    易语言一点滴模块文件下载

    总的来说,"易语言一点滴模块文件下载"是一个学习和使用易语言时的重要资源,它体现了易语言社区的共享精神,也是推动易语言程序开发进步的一个重要因素。通过不断学习和使用这些模块,开发者能够快速提升自己的编程...

    DotNET_CS(WinForm)开发技巧点滴

    【 DotNET_CS(WinForm) 开发技巧点滴】 在.NET框架下的C/S(客户端/服务器)应用程序开发中,WinForm是一种常见的用户界面技术。这里我们探讨一些开发中的实用技巧,这些技巧可以帮助提升开发效率和软件质量。 1. ...

    父亲节动态电子相册PPT_精美学习课件ppt

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. 父亲节电子相册的设计理念与情感表达 #### 设计理念 - **主题定位**:“父爱如山”,通过这一主题来表达父亲对孩子深沉而坚定的爱。 - **情感...

    液体点滴速度监控装置

    本系统通过光电传感器检测液面高度和液体点滴速度,使用步进电机控制液体点滴速度,并实现了多机通信,即一个主机站控制多个从机站和主、从机之间的数据传输。 系统组成框图: 1. 测量模块:使用光电传感器检测...

    自动点滴管理系统.NET

    在.NET 3.5框架下,开发自动点滴管理系统时,开发人员可以充分利用该框架提供的类库和工具,如ASP.NET、LINQ以及AOP(面向切面编程)等,以提高开发效率和代码质量。.NET 3.5框架引入了对C# 3.0和VB.NET 9.0的支持,...

    js素材点滴记录和分享

    【标题】"js素材点滴记录和分享"涉及的是JavaScript编程领域的知识,主要集中在JavaScript的应用实践和素材积累。...同时,对于想要了解JavaScript源码分析和学习开发工具使用的读者来说,也是一个宝贵的学习资源。

    印制线路板设计经验点滴总结--PDF

    ### 印制线路板设计经验点滴总结 #### 一、板的布局 1. **元器件放置顺序**:首先放置那些与结构有紧密配合的固定位置的元器件,如电源插座、指示灯、开关、连接件等,并用软件锁定;其次放置线路上的特殊元件和较...

    PLC个人经验点滴

    PLC个人经验点滴,是PLC开发的实际工作经验,千金难买。

Global site tag (gtag.js) - Google Analytics