【发布时间】:2011-12-26 06:34:11
【问题描述】:
有没有什么简单的方法可以在RPGLE中直接返回字符长度和类型变量?我这里说的长度不是D-spec中规定的长度。我说的是字符串中有意义的字符的实际数量。假设一个字符类型变量被定义为 50 个字符长,并赋值为 'Hello world!',那么我想要的长度是 12,即从 'H' 到 '!'。忽略前导和尾随空格。有什么简单的方法吗?
【问题讨论】:
标签: ibm-midrange rpgle variable-length
有没有什么简单的方法可以在RPGLE中直接返回字符长度和类型变量?我这里说的长度不是D-spec中规定的长度。我说的是字符串中有意义的字符的实际数量。假设一个字符类型变量被定义为 50 个字符长,并赋值为 'Hello world!',那么我想要的长度是 12,即从 'H' 到 '!'。忽略前导和尾随空格。有什么简单的方法吗?
【问题讨论】:
标签: ibm-midrange rpgle variable-length
您可以使用%len(%trimr(field)),它会在检查长度之前修剪尾随空格。
%triml 修剪前导空格(在左侧)%trimr 修剪尾随空格(在右侧)%trim 修剪前导和尾随空格【讨论】:
看起来您要查找长度的字段是固定字符字段,例如
dmsg s 40a
如果我们执行 eval msg = 'Hello, World!'那么味精不包含“你好,世界!” - 它包含“你好,世界! ' 也就是说,它有一堆空格来填充到 40 个字符。这就是固定长度字段的定义。
%trimr() 可以很好地处理这些,它甚至还有一个可选参数来定义应该修剪哪些字符。
另一方面,如果您要使用可变长度字段
dmsg s 40a Varying
然后执行 eval msg = 'Hello, World!'那么该字段实际上只包含分配给它的字符。在这种情况下,不需要 %trimr(); %len() 将返回字段的当前长度。
【讨论】: