在标准RPGLE中,我的代码如下所示。此语句将逗号的位置存储在 ComArr 数组中的数据中。
C ',' Scan Data ComArr
我尝试过像这样的免费格式。但 ComArr 数组的所有索引都加载了数据中逗号的第一个位置。这是因为%Scan仅返回一个位置,并在将其保存到数组时最终使用单个值加载整个数组。
ComArr = %Scan(',':Data) ;
有没有其他方法可以像C规范那样以自由格式RPGLE处理SCAN?基本上我想拆分由分隔符分隔的字符串。
答案 0 :(得分:0)
这可能有点晚了,但如果其他人需要按给定的分隔符分割字符串,则此代码应该满足您的需要。
如果使用通配符eval array(*) = ...
为数组赋值,则它适用于数组的每个元素。
在您的来源中声明原型:
D split pr 1024a varying
D string 65535a varying const options(*varsize)
D delims 50a varying const
D pos 10i 0
声明几个变量。 假设您的输入字符串为1000个字符,每个分隔的项目最多为10个字符:
D idx s 10i 0
D list s 1000a
D splitAry s 10a dim(100)
这是你分割字符串的方法。 这告诉例程您的分隔符是逗号:
c eval idx = 0
c eval splitAry(*) = split(list:',':idx)
定义完成工作的程序:
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* split - Split delimited string
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Psplit b export
D split pi 1024a varying
D iString 65535a varying const options(*varsize)
D iDelims 50a varying const
D iPos 10i 0
*
D result s 1024a varying
D start s 10i 0
D char s 1a
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
c eval start = iPos + 1
c eval %len(result) = 0
*
c for iPos = start to %len(iString)
c eval char = %subst(iString:iPos:1)
c if %check(iDelims:char) = 1
c eval result = result + char
c else
c leave
c endif
c endfor
*
c return result
Psplit e
如果您在同一个模块中定义并使用它,请不要忘记将dftactgrp(* no)添加到您的H规范中!