||Specifies the data structures to be given new names (i.e. identifiers)|
||Text for each data structure containing its new identifier|
SETNAME lets you set a new identifier (or name) for a data structure. It differs from the similar
RENAME directive in that the new identifier is supplied in a text structure. In
RENAME the new identifier itself is specified.
The data structure to be given a new name is specified by the
DATA parameter. If
DATA is set to a dummy,
SETNAME will operate on the data structure to which it points, not on the dummy itself. The text containing the new identifier is specified by the
NAME parameter. This must be a simple identifier; identifiers with suffixes are not allowed. Also, note that the scope of the identifier will always be global (i.e. in your main program), even if
SETNAME is called from inside another procedure.
For example, if you put
SETNAME A; NAME='B'
the data structure previously known as
A would be renamed to have the identifier
B, and the data structure previously known as
B would lose its identifier and become unnamed. The identifier
A would then no longer belong to anyone (and could if required be reused).
In the simplest situations, the first appearance of the new identifier will be in the
SETNAME command. So there will be no consequences from the fact that the “orphan” data structure that it previously identified becomes unnamed. If the identifier has already been used, the orphan data structure will be deleted, unless it is found to belong to another (named) data structure. So, for example, if the full program was
SCALAR B; VALUE=1
POINTER [VALUES=B] Q
SETNAME A; NAME='B'
the scalar 1 would survive as the first element of the pointer
Q. So it could still be referred to as
Q, although of course no longer as
CAPTION 'SETNAME example'; STYLE=meta SPLOAD '%GENDIR%/Data/Canola.gsh' " form N x S table of mean yields (to show what happens when N and S are renamed) " TABULATE [CLASSIFICATION=N,S] yield; MEAN=MeanYield PRINT MeanYield " print to show the original values of N and S " PRINT N,S " rename N to Nitrogen, and S to Sulphur " SETNAME N,S; NAME='Nitrogen','Sulphur' " print to show that N has become Nitrogen, and S has become Sulphur " PRINT Nitrogen,Sulphur " notice the renaming carries over to the classification of MeanYield " PRINT MeanYield