Как получить длину переменной символьного типа в RPGLE? - PullRequest
4 голосов
/ 10 ноября 2011

Есть ли простой способ напрямую вернуть длину символа и переменной типа в RPGLE?Длина, о которой я говорю, не является длиной, указанной в D-спецификации.Я говорю о фактическом количестве значащих символов в строке.Допустим, переменная символьного типа определена длиной 50 символов и ей присвоено значение «Hello world!», Тогда я хочу, чтобы длина составляла 12, то есть от «H» до «!».Ведущий и конечный пробел игнорируется.Есть ли простой способ сделать это?

Ответы [ 2 ]

12 голосов
/ 10 ноября 2011

Вы можете использовать %len(%trimr(field)), который обрезает завершающие пробелы перед проверкой длины.

  • %triml обрезает начальные пробелы (слева)
  • %trimr обрезает конечные пробелы (справа)
  • %trim обрезает начальные и конечные пробелыпробелы
9 голосов
/ 10 ноября 2011

Похоже, поле, длина которого вы пытаетесь найти, является фиксированным символьным полем, например

     dmsg              s             40a

Если мы сделаем eval msg = 'Hello, World!' тогда сообщение не содержит «Hello, World!» - он содержит «Привет, мир! «То есть он имеет кучу пробелов, чтобы заполнить его до 40 символов. Вот так по определению работают поля фиксированной длины.

% trimr () может очень хорошо работать с ними, и даже имеет дополнительный параметр, определяющий, какие символы должны быть обрезаны.

С другой стороны, если вы используете поле переменной длины

     dmsg              s             40a   Varying

и затем сделал eval msg = 'Привет, мир!' тогда поле фактически содержит только назначенные ему символы. В этом случае не требуется% trimr (); % len () вернет текущую длину поля.

...