Как получить длину переменной типа символа в RPGLE?

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


person God_of_Thunder    schedule 10.11.2011    source источник


Ответы (2)


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

  • %triml обрезает начальные пробелы (слева)
  • %trimr обрезает конечные пробелы (справа)
  • %trim обрезает начальные и конечные пробелы
person dmc    schedule 10.11.2011

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

     dmsg              s             40a

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

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

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

     dmsg              s             40a   Varying

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

person Buck Calabro    schedule 10.11.2011