我正在尝试创建一个将采用数组并返回已使用元素计数的过程(为什么这不是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
显然我是新手,所以我有几个问题:
我知道我可以保留一个单独的计数器变量,只要我在数组中设置一个元素就会增加,但我真的想找到一个更好的解决方案...谢谢你的阅读。
答案 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只有一个可执行语句。在大多数情况下,语句存在的唯一原因是为调试断点提供已知位置。编译并在调试中运行,并在断点触发时显示两个数组。
从那里,对其他所需内容的描述会有所帮助。