如何在SDSF的Rexx接口中获取第2至第8个用户库(Userlib)信息
解决SDSF Rexx接口获取多个用户库的问题
我刚好对SDSF的Rexx接口有不少实践经验,你遇到的这个问题其实是没用到重复字段的索引访问机制——SDSF对于像用户库(ODUSRLIB)这类允许重复出现的字段(最多8个),会生成带数字后缀的变量来存储每一个值,而JDS_ODUSRLIB默认只会返回第一个匹配的值。
具体解决步骤
理解字段的存储方式
ODUSRLIB是SDSF定义的重复字段,最大支持8个用户库条目。SDSF会自动为每个条目生成变量:JDS_ODUSRLIB_1(第一个用户库)、JDS_ODUSRLIB_2(第二个)……直到JDS_ODUSRLIB_8(第八个)。动态遍历所有用户库变量
在你的Rexx代码内部循环里,可以用Rexx的value()函数来动态引用这些带索引的变量,遍历1到8的范围,取出非空的值即可(没有对应条目的变量会是空字符串)。
代码示例
把这段逻辑加到你现有的内部循环里:
/* 遍历最多8个用户库条目 */ do i = 1 to 8 /* 动态拼接变量名 */ lib_var_name = "JDS_ODUSRLIB_" || i /* 获取变量对应的值 */ current_lib = value(lib_var_name) /* 仅处理非空的有效条目 */ if current_lib \= "" then do say "第" i "个用户库: " current_lib /* 这里可以添加你的业务处理逻辑 */ end end
额外提示
如果你想先确认实际存在多少个用户库条目,可以检查JDS_ODUSRLIB_OCCURS变量(这个变量会返回当前假脱机文件实际的用户库数量),用它来控制循环上限会更高效:
lib_count = value("JDS_ODUSRLIB_OCCURS") if lib_count = "" then lib_count = 0 do i = 1 to lib_count lib_var_name = "JDS_ODUSRLIB_" || i current_lib = value(lib_var_name) say "第" i "个用户库: " current_lib end
这样就能完整获取所有8个可能的用户库信息了,我之前处理类似的假脱机文件属性时就是这么做的,亲测有效~
内容的提问来源于stack exchange,提问作者Per Beliing
相关产品推荐
相关产品推荐

