Есть ли простой способ напрямую вернуть длину символа и переменную типа в RPGLE? Длина, о которой я говорю здесь, не соответствует длине, указанной в спецификации D. Я говорю о фактическом количестве значимых символов в строке. Допустим, переменная символьного типа определена как имеющая длину 50 символов, и ей присвоено значение «Привет, мир!», тогда длина, которую я хочу, составляет 12, то есть от «H» до «!». Ведущий и завершающий пробел игнорируются. Есть ли простой способ сделать это?
Как получить длину переменной типа символа в RPGLE?
Ответы (2)
Вы можете использовать %len(%trimr(field))
, который обрезает конечные пробелы перед проверкой длины.
%triml
обрезает начальные пробелы (слева)%trimr
обрезает конечные пробелы (справа)%trim
обрезает начальные и конечные пробелы
Похоже, что поле, длину которого вы пытаетесь найти, представляет собой фиксированное символьное поле, например
dmsg s 40a
Если мы выполним eval msg = 'Hello, World!' то сообщение не содержит «Hello, World!» - он содержит «Привет, мир! ' То есть в нем есть куча пробелов, чтобы дополнить его до 40 символов. Вот как работают поля фиксированной длины по определению.
%trimr() может очень хорошо работать с ними, и у него даже есть необязательный параметр, определяющий, какие символы следует обрезать.
С другой стороны, если бы вы использовали поле переменной длины
dmsg s 40a Varying
а затем сделал eval msg = 'Hello, World!' то поле фактически содержит только назначенные ему символы. В этом случае %trimr() не нужен; %len() вернет текущую длину поля.