AS400 RPGLE/free dynamic variables in operations

2019-08-16 02:28发布

问题:

I'm fairly certain after years of searching that this is not possible, but I'll ask anyway.

The question is whether it's possible to use a dynamic variable in an operation when you don't know the field name. For example, I have a data structure that contains a few hundred fields. The operator selects one of those fields and the program needs to know what data resides in the field from the data structure passed. So we'll say that there are 100 fields, and field50 is what the operator chose to operate on. The program would be passed in the field name (i.e. field50) in the FLDNAM variable. The program would read something like this the normal way:

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

The problem is that I would have to code this 100 times for every operation. For example:

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

Is there any possible way of performing an operation on a field not yet known? (i.e. IF FLDNAM(pointer data) = 'XXX' then do something)

回答1:

If the data structure is externally-described and you know what file it comes from, you could use the QUSLFLD API to find out the offset, length, and type of the field in the data structure, and then use substring to get the data and then use other calculations to get the value, depending on the data type.



回答2:

Simple answer, no.

RPG's simply not designed for that. Few languages are.

You may want to look at scripting languages. Perl for instance, can evaluate on the fly. REXX, which comes installed on the IBM i, has an INTERPRET keyword.

REXX Reference manual