REXX Tips & Tricks, Version 2.80

Inf-HTML [About][Toc][Index] 0.9b (c) 1995 Peter Childs

Using "open" compound variables

If you're using compound variables completely defined in your source code, 
you may use a technique I call "open compound variables" shown in the 
example below. 
The advantage of this method: You can add new variables to the end of the 
compound variable without maintaining a counter (stem.0 is not used). I 
often forget to correct the counter after adding new entries to the 
compound variable. 
Note that using this method in Classic REXX is only useful if you define 
the compound variable completely in the source code (no changes at 
In Object-Oriented REXX you can use it anyway because there you can get 
all stem entries very simply with the DO ... OVER construct (see the code 
at the end of the example).   

/* sample for using "open" compound variables                         */

                    /* drop the stem (to be sure)                     */
  drop nameStem.

                    /* define the compound variable                   */
  nameStem.1 = "Albert"
  nameStem.2 = "Robert"
  nameStem.3 = "William"

                    /* use the compound variable                      */

                    /* use the function symbol to find the last entry */
                    /* of the compound variable                       */

  do i = 1 while symbol( "nameStem." || i ) = "VAR"

    say "Entry no. " || i || " is " nameStem.i

  end /* do i = 1 while symbol( "nameStem." || i ) = "VAR" */

                     /* Note: i-1 is the number of stem entries. You  */
                     /*       can save this value in the variable     */
                     /*       nameStem.0 and use the normal methods   */
                     /*       in the rest of your program.            */

  say "The compound variable contains " || i-1 || " entries."

/* another useful method for a loop over all entries            v2.50 */
/* Note that this method is only possible in Object REXX!!!     v2.50 */

   parse version thisVersion .
   if thisVersion = "OBJREXX" then
     say "In Object REXX you can use also the DO OVER construct:"

     j = 0;
     do i over nameStem.
       j = j + 1;
       say "Entry no. " || i || " is " namestem.i
     end /* do i over namestem. */
     say "The compound variable contains " || j || " entries."

  end /* if thisVersion = "OBJREXX" then */

(see also Defining compound variables)   

Inf-HTML End Run - Successful