我目前正在编写一个程序,将物理文件从生产环境传输到我的测试环境。为了做到这一点,我想
CPYF通过CL程序复制它们一位同事告诉我使用CL an OVRDBF ( QRPGSRC ),在我的F-规范中定义QRPGSRC并像其他PF一样使用它们(成员名上的读/链)。这看起来有点混乱,所以我寻找了另一个解决方案:在F-Specs中使用keyworks:https://www.google.de/search?q=ibm+rpg+EXTMBR。
所以我用CRTSRCPF在TSTLIB中创建了4个TSTLIB
CRTLIB LIB(TSTLIB) TYPE(TEST)
CRTSRCPF FILE(TSTLIB/QCLSRC)
CRTSRCPF FILE(TSTLIB/QDDSSRC)
CRTSRCPF FILE(TSTLIB/QRPGLESRC)
CRTSRCPF FILE(TSTLIB/QRPGSRC)并将现有的源代码文件从我自己的libary MYLIB/QRPGSRC复制到TSTLIB/QRPGSRC。然后在MYLIB/QRPGLESRC中创建了一个新的ILE程序,其中我定义了:
FQRPGSRC IF E K DISK在编译时,我得到两个错误(#1有严格的30,#2在40: RNF2121和RNF2109')告诉我
和
当我阅读一些教程时:我可以通过使用源代码文件als记录名的名称来轻松地访问它们。但是根据错误消息,只有一个记录名,即:QRPGSRC。
添加关键字,如:
FQRPGSRC IF E K DISK extfile('TSTLIB/TST001R')帮不上什么忙。现在,错误仍然存在,但是在编译输出中出现了某种标题,它显示了文件的“RPG-名称”和“外部名称”(QRPGSRC)和记录格式:
*--------------------------------------------------------------------------------------------*
* RPG-Name External Name *
* Filename . . . . . . . . : QRPGSRC SYSLIB/QRPGSRC *
* Record format . . . . . . : (Not used) QRPGSRC *
*--------------------------------------------------------------------------------------------* 当指定SYSLIB时,TF为什么在这里?当RENAME从QRPGSRC到QRPGSRCR时,不再存在编译错误(除了不使用定义的文件)。
FQRPGSRC IF E K DISK extfile('TSTLIB/TST001R')
F rename(QRPGSRC:QRPGSRCR) 那么,我的问题是:我需要做什么才能像普通的LF/PF那样读取PF,这样我就可以在位于给定PF-SRC的源代码文件中的一行上读取/链接?
发布于 2017-06-13 13:34:08
你就快到了,不过还有几件事。
K是不正确的,如果您链接,它将使用一个相对的记录编号。READ是这种类型文件的最佳选择。考虑到这可能不是确定程序的文件依赖关系的最佳方法。要回答你的具体问题:
FQRPGSRC IF E DISK rename(QRPGSRC:QRPGSRCR)很可能是你在固定格式下的最佳选择。但是我喜欢推广更现代的方法,所以在自由格式中它看起来更像这样:
**free
ctl-opt DftActGrp(*No) ActGrp(MyNamedAG)
DatFmt(*ISO)
Option(*SrcStmt: *NoDebugIo: *NoUnref);
dcl-f qrpgsrc qualified;
dcl-ds src LikeRec(qrpgsrc.qrpgsrc);
dcl-s ix Int(5) Inz(0);
dcl-s FullyFree Ind Inz(*OFF);
dcl-c LC 'abcdefghijklmnopqrstuvwxyz';
dcl-c UC 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ix = 1 to 50;
read qrpgsrc.qrpgsrc src;
if %eof();
leave;
endif;
// Is this a fully free form program?
if ix = 1;
FullyFree = (%xlate(UC: LC: %trim(src.srcdta)) = '**free');
endif;
// Do something here
endfor;
return; 您将希望使用CLP或其他东西将源文件覆盖到适当的库,并选择要处理的成员。这也可以在一个循环中检索所有成员,每个成员调用一次您的程序。
确定程序依赖关系的最佳方法是使用DSPPGMREF命令,如对问题的注释中所示。
发布于 2017-06-20 13:38:23
如果您的系统与我见过的大多数类似,那么有数百个文件是通过查询、sql、保存文件、工作文件等创建的,您可能需要,也可能不需要。此方法允许您提取系统上的所有文件,并随意操作/分析。
我将执行一个DSPOBJD (提示使用F4)并提供以下参数: DSPOBJD (*LIBL或特定库/*ALL) OBJTYPE(*FILE) DETAIL(*SERVICE)输出(*OUTFILE) OUTFILE(YOURLIB/LASTUSED)。
这会在你的库中创建一个你可以操作的文件.运行一个SQL删除所有使用的天数(ODUCNT) =0或您的选择,以及任何对象属性<> 'PF‘。这只剩下物理文件了。
然后可以选择在最后x天内使用的对象,但必须首先将最后使用的日期(ODUDAT)转换为YYMMDD格式.更新nwilson/lastused集ODUDAT = SUBSTR( ODUDAT ,5,2) concat substr(ODUDAT,1,4)其中ODUDAT <>‘’。
这将允许您比较*天等,并构建动态语句来复制到开发工具库。
发布于 2017-06-21 15:49:03
对于自动化过程,您必须执行dsppgmref和prtsqlinf。
一般来说,生产数据库结构变化缓慢,每年都会有一些变化,所以我集中精力把生产数据混为一谈。当我复制phone#s时,它会更改个人可识别的信息。
set HOMEPHONE = '555-555-'
|| cast( cast( rand(49782) * 10000 as integer) || '0000' as char(4))
WHERE homephone <> ' '; https://stackoverflow.com/questions/44521641
复制相似问题