从 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 语句并避免游标,但这可能更容易理解为答案。
我有一个 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 语句并避免游标,但这可能更容易理解为答案。