如何在RPGLE中获取字符类型变量的长度?

God*_*der 4 variable-length rpgle ibm-midrange

有没有简单的方法可以在RPGLE中直接返回字符长度和类型变量?我在这里讨论的长度不是D规格中规定的长度.我在谈论字符串中有意义的字符的实际数量.假设一个字符类型变量被定义为50个字符长,并且它被赋值为'Hello world!',那么我想要的长度是12,即从'H'到'!'.前导和尾随空白被忽略.有没有简单的方法来做到这一点?

dmc*_*dmc 11

您可以使用%len(%trimr(field)),在检查长度之前修剪尾随空格.

  • %triml 修剪前导空间(左侧)
  • %trimr 修剪尾随空格(右侧)
  • %trim 修剪前导和尾随空格


Buc*_*bro 9

它看起来像你试图找到的字段长度是一个固定的字符字段,就像

     dmsg              s             40a
Run Code Online (Sandbox Code Playgroud)

如果我们做一个eval msg ='Hello,World!' 然后msg不包含'Hello,World!' - 它包含'你好,世界!'也就是说,它有一堆空白可以填充40个字符.这就是固定长度字段的定义.

%trimr()可以很好地处理这些,它甚至有一个可选参数来定义应该修剪哪些字符.

另一方面,如果您要使用不同长度的字段

     dmsg              s             40a   Varying
Run Code Online (Sandbox Code Playgroud)

然后做了一个评估msg ='你好,世界!' 那么该字段实际上只包含分配给它的字符.在这种情况下,不需要%trimr(); %len()将返回字段的当前长度.