Nombres de columnas con una inicial numéricaTengo un código que presenta problemas con nombres de columnas que tienen una inicial numérica, por lo que el código cree que el nombre representa una fecha. Renombré la columna para solucionar el problema, pero es desagradable. También descubrí que encapsular el objeto que representa los nombres en una declaración Char(obj) tampoco funcionaba. ¿Alguna sugerencia para solucionar esto?
dt = Current Data Table();
cnmes = dt << get column names( "string" );
For( j = 1, j <= N Items( cnmes ), j++,
if (Starts With( cnmes[j], "1" ) == 1 | Starts With( cnmes[j], "2" ) == 1 | Starts With( cnmes[j], "3" ) == 1| Starts With( cnmes[j], "4" ) == 1 | Starts With( cnmes[j], "5" ) == 1 | Starts With( cnmes[j], "6" ) == 1 | Starts With( cnmes[j], "7" ) == 1 | Starts With( cnmes[j], "8" ) ==1 | Starts With( cnmes[j], "9" ) == 1 | Starts With( cnmes[j], "0") == 1 ,
Column(cnmes[j]) << set name("_"||cnmes[j])
) );
Automatización y scriptingRe: Nombres de columnas con una inicial numéricaPuede usar la función Column() para hacer referencia a los nombres de columna en su lista "cnmes". O bien, si codifica los nombres de columna de forma rígida, use lo siguiente:
// Report snapshot: Big Class - Graph Builder
Data Table( "Big Class" ) << Graph Builder(
Variables( X( :"1height"n ), Y( :"1height"n ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);

names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// Change column name: height → 1height
try(Data Table( "Big Class" ):height << Set Name( "1height" ));
// Change column name: weight → 3weight
try(Data Table( "Big Class" ):weight << Set Name( "3weight" ));
cnmes = dt << get column names( "string" );
Graph Builder(
Variables( X( column(cnmes[5])), Y( column(cnmes[4]) ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
Re: Nombres de columnas con una inicial numéricaEstás viendo estos problemas, ya que los nombres deben comenzar con un carácter alfabético o con un guion bajo . Guía de scripting > Bloques de construcción JSL > Reglas de sintaxis JSL > Nombres . Dependiendo de lo que estés haciendo, podrías querer renombrarlos o no (consulta las opciones de txnelson). Para renombrarlos, podrías, por ejemplo, usar expresiones regulares con algo como esto.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(0),
Compress File When Saved(1),
New Column("1col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("13col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("0col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("Column 4",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([])
)
);
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
newname = Regex(colname, "^\d+.+", "_\0");
If(!IsMissing(newname),
Column(dt, colname) << Set Name(newname);
);
);