2017-01-26 23 views
0

经过多年的搜索,我相当确定这是不可能的,但我仍然会问。AS400 RPGLE /操作中的空闲动态变量

问题是,如果您不知道字段名称,是否可以在操作中使用动态变量。例如,我有一个包含几百个字段的数据结构。操作员选择其中一个字段,程序需要从传递的数据结构中知道数据驻留在字段中。所以我们会说有100个字段,字段50是操作员选择操作的字段。该程序将在FLDNAM变量中的字段名称(即字段50)中传递。该程序会读取像这样的正常方式:

/free 
    if field50 = 'XXX' 
    // do something 
    endif; 
/end-free 

问题是,我将不得不为每个操作代码这100次。例如:

/free 
    if fldnam = 'field1'; 
    // do something 
    elseif fldnam = 'field2'; 
    // do something 
    .. 
    elseif fldnam = 'field50'; 
    // do something 
    endif; 

是否有任何可能的方式对未知的字段执行操作? (即IF FLDNAM(指针数据)='XXX'然后做点什么)

+2

RPG是一种强类型语言。字段必须预先定义,并且字段的名称永远不会被程序以您可以检索或动态指定的方式获知。你可以使用数组,还是所有的字段都不一样? – jmarkmurphy

+0

嗨。感谢您的回应。我想如果需要使用数组,只是为了更快的处理。我将加载一个数据区域以及一个字段名称数组,然后是一个位置数组。代码可能会变得非常复杂,但是如果您不能使用动态变量,那是我的备份计划。所有的字段都是不同的长度,有些是十进制的,等等。我知道可以通过数组来工作,但是我想知道是否有其他选项。 – user1420914

+0

绝对可以这样做。想想一个查询。它在开始之前是否知道你想要的领域?它可以帮助你选择字段吗? – danny117

回答

3

如果数据结构是外部描述的,你知道是哪个文件从何而来,你可以使用QUSLFLD API,找出偏差,长度和类型的字段中的数据结构,然后使用substring获取数据,然后使用其他计算来获取值,具体取决于数据类型。

+0

我加了这个答案,尽管REXX可能会这样做。然而,我最终采用了与此类似的解决方案。我已经有一个列出数据位置,长度等的文件。基本上只是该文件的DSPFFD。我将这些值加载到数组中,然后根据发送给程序的字段来替换数据。事实证明,这比我想象的要容易得多,代码比我想象的要少得多。好东西,因为我太老,无法学习另一种编程语言。 :) – user1420914

1

简单的答案,没有。

RPG的根本不是为此设计的。很少有语言。

你可能想看看脚本语言。比如Perl,可以即时评估。安装在IBM i上的REXX具有INTERPRET关键字。

REXX Reference manual