Nomi di colonna con iniziale numericaHo un codice che si inceppa con i nomi di colonna che hanno un'iniziale numerica, per cui il codice pensa che il nome rappresenti una data. Ho rinominato la colonna per risolvere il problema, ma è un'operazione orribile. Ho anche scoperto che racchiudere l'oggetto che rappresenta i nomi in un'istruzione Char(obj) non funzionava. Avete suggerimenti su come gestire meglio questo problema?
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])
) );
Automazione e scriptingRe: Nomi di colonna con iniziale numericaÈ possibile utilizzare la funzione Column() per fare riferimento ai nomi delle colonne nell'elenco "cnmes". In alternativa, se si stanno codificando i nomi delle colonne in modo rigido, utilizzare il seguente comando.
// 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: Nomi di colonna con iniziale numericaStai riscontrando questi problemi perché i nomi devono iniziare con un carattere alfabetico o con un trattino basso . Guida allo scripting > Blocchi di costruzione JSL > Regole di sintassi JSL > Nomi . A seconda di cosa stai facendo, potresti volerli rinominare o meno (vedi le opzioni di txnelson). Per rinominare, potresti ad esempio utilizzare un'espressione regolare con qualcosa del genere.
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);
);
);