我有一个IFS文件位置,在那里我有来自外部系统的多个入站文件。存在命名为ITEM_DDMMYYHHMMSS
的与项目相关的文件,以及名称为CUST_DDMMYYHHMMSS
的与客户相关的文件。会有多个文件,我的Item程序必须逐个读取Item文件,而我的客户程序必须逐个阅读客户文件。我不认为一个单纯的CPYFRMIMPF可以做到这一点。有什么好方法可以做到这一点吗?
您需要读取程序中所有感兴趣的文件,然后循环遍历它们并单独处理。您可以使用Scott Klement关于使用IFS和RPG的教程。
http://www.scottklement.com/presentations/#RPGIFS
它提供了读取目录中文件列表的示例。然后根据需要进行处理。
我碰巧在大约一年前就解决了这种确切的情况。Scott关于使用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语句中,并避免使用游标,但这可能更容易理解为一个答案。