从IFS读取多个文件

时间:2018-10-30 17:15:54

标签: ibm-midrange rpgle

我有一个IFS文件位置,在这里我有来自外部系统的多个入站文件。有与项目相关的文件,其名称为tbl_Identity,与客户相关的文件为ITEM_DDMMYYHHMMSS。 会有多个文件,我的项目程序必须一一读取项目文件,而我的客户程序必须一一读取客户文件。 我不认为仅CPYFRMIMPF就能实现这一目标。有什么好的方法可以做到这一点吗?

2 个答案:

答案 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语句中,并避免使用游标,但这可能更容易理解为答案。