2017-01-26 2 views
0

Я довольно уверен после нескольких лет поиска, что это невозможно, но я все равно спрошу.AS400 RPGLE/свободные динамические переменные в операциях

Вопрос в том, можно ли использовать динамическую переменную в операции, если вы не знаете имя поля. Например, у меня есть структура данных, содержащая несколько сотен полей. Оператор выбирает одно из этих полей, и программе необходимо знать, какие данные находятся в поле из переданной структуры данных. Итак, мы скажем, что существует 100 полей, а field50 - это то, на что оператор решил работать. Программа будет передана в поле имени (то есть поле 50) в переменной FLDNAM. Программа будет читать что-то вроде этого обычным способом:

/free 
    if field50 = 'XXX' 
    // do something 
    endif; 
/end-free 

Проблема заключается в том, что я бы закодировать это в 100 раз для каждой операции. Например:

/free 
    if fldnam = 'field1'; 
    // do something 
    elseif fldnam = 'field2'; 
    // do something 
    .. 
    elseif fldnam = 'field50'; 
    // do something 
    endif; 

Есть ли какой-либо возможный способ выполнения операции в поле, которое еще не известно? (то есть IF FLDNAM (данные указателя) = 'XXX', затем что-то делать)

+2

RPG - это строго типизированный язык. Поля должны быть определены заранее, и имя поля никогда не известно программе таким образом, что вы можете получить или указать динамически. Не могли бы вы использовать массив или все поля разные? – jmarkmurphy

+0

Привет. Спасибо за ответ. Я думал об использовании массива, если требуется, только для более быстрой обработки. Я бы начал загружать область данных, а также массив имен полей, а затем и позиционный массив. Код может стать довольно сложным техническим обслуживанием, но это мой план резервного копирования, если вы не можете использовать динамические переменные. Все поля различной длины, некоторые из них упакованы в десятичные числа и т. Д. Я знаю, что можно заставить его работать с массивами, но я решил проверить и посмотреть, есть ли другие варианты. – user1420914

+0

Абсолютно это можно сделать. Подумайте о запросе. Знает ли он, какие поля вы хотите, прежде чем начать? Может ли это помочь вам выбрать поля? – danny117

ответ

3

Если структура данных извне описано, и вы знаете, что это за файл приходит, вы могли бы использовать QUSLFLD API, чтобы выяснить, смещение, длину и тип поля в структуре данных, а затем использовать подстроку для получения данных, а затем использовать другие вычисления для получения значения в зависимости от типа данных.

+0

Я добавил это как ответ, хотя REXX мог бы это сделать. Я закончил тем, что решил решение, подобное этому. У меня уже есть файл, в котором указаны позиции данных, длины и т. Д. В основном это только DSPFFD файла. Я загружаю эти значения в массивы и вывожу данные «на лету» и заменяя их на основе поля, отправленного программе. Это оказалось проще, чем я думал, и намного меньше кода, чем я себе представлял. Хорошо, потому что я слишком стар, чтобы изучить другой язык программирования. :) – user1420914

1

Простой ответ, нет.

РПГ просто не предназначена для этого. Немного языков.

Возможно, вы захотите посмотреть языки сценариев. Например, Perl может оценивать «на лету». REXX, установленный на IBM i, имеет ключевое слово INTERPRET.

REXX Reference manual

Смежные вопросы