我有一个IFS文件位置,在这里我有来自外部系统的多个入站文件。有与项目相关的文件,其名称为tbl_Identity
,与客户相关的文件为ITEM_DDMMYYHHMMSS
。
会有多个文件,我的项目程序必须一一读取项目文件,而我的客户程序必须一一读取客户文件。
我不认为仅CPYFRMIMPF就能实现这一目标。有什么好的方法可以做到这一点吗?
答案 0 :(得分:4)
您将需要阅读程序中所有感兴趣的文件,然后循环浏览它们并分别进行处理。您可以使用Scott Klement的有关将IFS与RPG结合使用的教程。
http://www.scottklement.com/presentations/#RPGIFS
它具有读取目录中文件列表的示例。然后根据需要进行处理。
答案 1 :(得分:-1)
大约一年前,我恰好解决了这个确切的情况。斯科特使用RPG中的C api的答案是一个很好的答案。但是,如果您的系统上碰巧有TAATOOLS,它会有一个名为CVTIFS
的命令,它使此操作变得更加容易(http://www.taatool.com/document/L_cvtifs.html)。这是一个相当普遍的第三方工具,因此希望它可以使用。然后您的解决方案将变成如下所示:
// CVTIFS OBJ(MyDirectory) OUTLIB(QTEMP) PROCSUBDIR(*NO) <-- Call this however you prefer
Exec Sql Declare FileNames Cursor For
Select IfDirE From QTemp.IfsDirP
Where IfoTyp = '*STMF' And IfPDir = :MyDirectory;
Exec Sql Open FileNames;
Exec Sql Fetch FilesNames Into :FileName;
DoW SqlState = '00000';
// Run your SQL XMLTable command here using FileName
Exec Sql Fetch FilesNames Into :FileName;
EndDo;
Exec Sql Close FileNames;
附加说明:您也可以将所有这些组合到一个大型SQL语句中,并避免使用游标,但这可能更容易理解为答案。