Having batincludes that deal with different data types

Top  Previous  Next

Here I write some code that puts data using put commands that can either be a set or a parameter and figures out which then uses the put commands (putcond.gms).

 

file at

put at

set a1 set to be put/item1 first,item2 second/

parameter r(a1) parameter to be put  /item1 5,item2 6/

$batinclude outit a1

$batinclude outit r

 

where outit.gms is

 

$If not "a%1" == "a" $goto start

$error Error in outit: item to be printed is not specified.

$label start

$If declared %1    $goto declared

$error Error in outit: identfier %1 is undeclared.

$exit

$label declared

$If defined %1     $goto defined

$error Error in outit: identfier %1 is undefined.

$exit

$label defined

$If settype %1  $goto doset

$If partype %1  $goto dopar

$error Error in outit: identfier %1 is not a set or a parameter.

$exit

$label doset

put /' set %1  ' %1.ts /

loop(%1,put '    Element called ' %1.tl ' defined as ' %1.te(%1) /)

put  /

$goto end

$label dopar

$If not dimension 1 %1 $goto badnews

$If not declared wkset1 alias(wkset1,*);

$If not declared wkset2 set wkset2(wkset1);

wkset2(wkset1)=no;

$onuni

wkset2(wkset1)$%1(wkset1)=yes;

display wkset2;

put /' Parameter %1  ' %1.ts  /

loop(wkset2,put '    Element ' wkset2.tl ' equals ' %1(wkset2) /)

put  /

$offuni

$goto end

$label badnews

$error Error in outit: identfier %1 is not a one dimensional parameter.

$label end

 

which becomes

 

   1  file at

   2  put at

   3  set a1 set to be put/item1 first,item2 second/

   4  parameter r(a1) parameter to be put  /item1 5,item2 6/

BATINCLUDE C:\GAMS\ADVCLASS\CLASS\EXAMPLE\CONDCOMP\OUTIT.GMS

  10  put /' set a1  ' a1.ts /

  11  loop(a1,put 'Element called' a1.tl 'definedas' a1.te(a1) /)

  12  put  /

BATINCLUDE C:\GAMS\ADVCLASS\CLASS\EXAMPLE\CONDCOMP\OUTIT.GMS

  21  alias(wkset1,*);

  22  set wkset2(wkset1);

  23  wkset2(wkset1)=no;

  25  wkset2(wkset1)$r(wkset1)=yes;

  26  display wkset2;

  27  put /' Parameter r  ' r.ts  /

  28  loop(wkset2,put ' Element' wkset2.tl 'equals ' r(wkset2) /)

  29  put  /

 

Note lines 21-25 figure out the set elements r is defined over and put it in set wkset2.