在RPG过程中接受未知大小的数组

时间:2014-03-04 22:21:59

标签: arrays rpgle rpg

我正在尝试创建一个将采用数组并返回已使用元素计数的过程(为什么这不是BIF?)。我正在努力找到一种方法将未知大小的数组传递给我的程序。

像...一样的东西。

P count         B
D count         PI              3  0 
D  array                         *
D  size                        10  0
D  elems                        3  0
 *
D ct            S               3  0
 /free
  // find the first blank or zero element and return 
 /end-free
P count         E

显然我是新手,所以我有几个问题:

  1. 有没有办法将size和max元素作为参数传递(或者可能是传递一种带有数据详细信息的头文件包的方法)?
  2. 有没有办法确定数据的类型? (所以我知道是否要寻找* ZEROS或* BLANKS)
  3. 我是否错过了其他更好的解决此问题的方法?
  4. 我知道我可以保留一个单独的计数器变量,只要我在数组中设置一个元素就会增加,但我真的想找到一个更好的解决方案...谢谢你的阅读。

2 个答案:

答案 0 :(得分:7)

我已经在RPG中编程......好吧,很长一段时间。看到一个新的RPG程序员真是太了不起了,看到现代编码概念从一开始就使用起来是非常了不起的。

RPG开始使用固定大小的一切。固定大小的字符串,固定大小的数字和固定大小的数组。作为一种基于穿孔卡的强类型语言,这一切都是有道理的。当然,现代计算要求往往需要不同大小的字符串,数字和数组。 RPG仍然是强类型的,因此给定变量只能是字符串或数字;它永远不会切换类型。这也意味着编译器没有办法在运行时确定变量类型 - 变量类型是不可变的,程序员和编译器都知道该类型是什么。哦,好吧。

至于你的不同长度数组,对此有一些希望。 Mihael Schmidt有service program called ArrayList可能会满足您的许多需求。

答案 1 :(得分:1)

您不清楚要对未知大小的数组执行哪些操作。也许一些示例代码可以提供一个起点,并且随着事情的进展可以添加或改进事物。所以,对于一个简单的例子:

 h dftactgrp( *NO )

 D tmp_Ary1        s             10i 0
 D tmp_Ary2        s             10

 d chk_Arrays      pr
 d  ary1                               like( tmp_Ary1 ) dim( 99 ) const
 d  ary2                               like( tmp_Ary2 ) dim( 99 ) const

 D ary1            s                   like( tmp_Ary1 ) dim( 50 )
 D ary2            s                   like( tmp_Ary2 ) dim( 50 )
  /free
        ary1( 1 ) = 12345 ;
        ary2( 1 ) = 'Some value' ;

        callP chk_Arrays ( ary1 : ary2 ) ;

        *inlr = '1';
  /end-free

 P chk_Arrays      b
 d                 pi
 d  ary1                               like( tmp_Ary1 ) dim( 99 ) const
 d  ary2                               like( tmp_Ary2 ) dim( 99 ) const

 d  foundElems     s             10i 0
  /free

   foundElems = 99 ;

   return;
  /end-Free
 p                 E

chk_Arrays()proc需要两个数组,一个是带有10个字节字符元素的dim(99),另一个是整数元素的dim(99)。但是使用定义为dim(50)的数组调用proc,并且每个数组中只填充一个元素。

proc只有一个可执行语句。在大多数情况下,语句存在的唯一原因是为调试断点提供已知位置。编译并在调试中运行,并在断点触发时显示两个数组。

从那里,对其他所需内容的描述会有所帮助。