从 IFS 读取多个文件

Reading Multiple Files from IFS

我有一个 IFS 文件位置,其中有多个来自外部系统的入站文件。有命名为 ITEM_DDMMYYHHMMSS 的项目相关文件和命名为 CUST_DDMMYYHHMMSS 的客户相关文件。 会有多个文件,我的项目程序必须一个接一个地读取项目文件,而我的客户程序必须一个接一个地读取客户文件。 我认为 Mere 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 语句并避免游标,但这可能更容易理解为答案。