$title GDXDUMP - Dumping special Values of Variable-Subfields from GDX (GDXDUMP4,SEQ=786) $onText A simple check to verify the results when dumping special values from a variable- subfields to a CSV file using GDXDUMP and the CSVAllFields option. In addition, the EpsOut, NaOut, pInfOut etc. options to customize the output string of special values are checked. Contributor: Jan-Erik Justkowiak, September 2018 $offText * Check the results when dumping a variable with special values in the subfields $onEcho > testDefault.gms Set dim1 / i1*i6 / dim2 / Eps, NA, '+Inf', '-Inf', Undf, 0 /; Alias (dim2, dim3, dim4, dim5, dim6); $onUNDF Variable x(*) / i1.l EPS, i2.l NA, i3.l INF, i4.l -INF, i5.l UNDF, i6.l 0 i1.m EPS, i2.m NA, i3.m INF, i4.m -INF, i5.m UNDF, i6.m 0 i1.lo EPS, i2.lo NA, i3.lo INF, i4.lo -INF, i5.lo UNDF, i6.lo 0 i1.up EPS, i2.up NA, i3.up INF, i4.up -INF, i5.up UNDF, i6.up 0 i1.scale EPS, i2.scale NA, i3.scale INF, i4.scale -INF, i5.scale UNDF, i6.scale 0 /; $gdxOut varX.gdx $unLoad x $gdxOut $call gdxdump varX.gdx format=csv symb=x CSVAllFields > dumpedX.csv $ifE errorLevel<>0 $abort Error writing to dumpedX.csv! * It's the best to read the CSV into a set, so we are sure not to miss something, e.g. zero's $call gamstool csvread dumpedX.csv gdxOut=dumpedX.gdx id=dumpedX index=1..lastCol useHeader=y trace=0 $ifE errorLevel<>0 $abort Error reading from dumpedX.csv! * Expected results Set dumpedX(*,*,*,*,*,*) / i1.Eps.Eps.Eps.Eps.Eps i2.NA.NA.NA.NA.NA i3.'+Inf'.'+Inf'.'+Inf'.'+Inf'.'+Inf' i4.'-Inf'.'-Inf'.'-Inf'.'-Inf'.'-Inf' i5.Undf.Undf.Undf.Undf.Undf i6.0.0.0.0.0 /; $gdxOut controlData.gdx $unLoad dim1 dim2 dim3 dim4 dim5 dim6 dumpedX $gdxOut * Check the results $call gdxdiff controlData.gdx dumpedX.gdx > %system.nullfile% $ifE errorLevel<>0 $abort Checking the results when dumping subfiels of a variable with special values failed! $offEcho $call gams testDefault.gms lo=%gams.lo% $ifE errorLevel<>0 $abort Error running testDefault.gms *------------------------------------------------------------------------------- * Check the results when dumping a variable with special values in the subfields * and change the string written of the special values by adding the EpsOut, NaOut etc. options $onEcho > testNonDefault.gms Set dim1 / i1*i6 / dim2 / Epsilon, 'Not Availible', 'Large Number', 'Small Number', 'Undefined', 'Zero' /; Alias (dim2, dim3, dim4, dim5, dim6); $call gdxdump varX.gdx format=csv symb=x CSVAllFields EpsOut=Epsilon NaOut="Not Availible" pInfOut="Large Number" mInfOut="Small Number" UndfOut=Undefined ZeroOut=Zero > dumpedXmod.csv $ifE errorLevel<>0 $abort Error writing to dumpedXmod.csv! * The identifier specified in the CSVRead call will be a parameter or set. Since * the strings specified above will not be readable for CSVRead, we ommit the * values specification and read the data as set using the index option $call gamstool csvread dumpedXmod.csv gdxOut=dumpedXmod.gdx id=dumpedXmod index=1..lastCol useHeader=y trace=0 $ifE errorLevel<>0 $abort Error reading from dumpedXmod.csv! * To compare the results, we define the expected data also as a set Set dumpedXmod(*,*,*,*,*,*) / i1.Epsilon.Epsilon.Epsilon.Epsilon.Epsilon i2."Not Availible"."Not Availible"."Not Availible"."Not Availible"."Not Availible" i3."Large Number"."Large Number"."Large Number"."Large Number"."Large Number" i4."Small Number"."Small Number"."Small Number"."Small Number"."Small Number" i5.Undefined.Undefined.Undefined.Undefined.Undefined i6.Zero.Zero.Zero.Zero.Zero /; $gdxOut controlData.gdx $unLoad dim1 dim2 dim3 dim4 dim5 dim6 dumpedXmod $gdxOut * Check the results $call gdxdiff controlData.gdx dumpedXmod.gdx > %system.nullfile% $ifE errorLevel<>0 $abort Checking the results when dumping subfiels of a variable with special values failed! $offEcho $call gams testNonDefault.gms lo=%gams.lo% $ifE errorLevel<>0 $abort Error running testNonDefault.gms *-------------------------------------------------------------------------------