Creazione di una tabella con JSL, problema con "Nuova colonna"Ciao,
Sto cercando di creare una tabella in JSL da un file di dati utilizzando la prima riga di dati del file per determinare il tipo di dati. Tuttavia, non sono in grado di creare nuove colonne nello script con tipi diversi da Numerico. Questo funziona:
dt << New Column("test", Character, Nominal)Tuttavia, questo (esempio semplificato) genera solo colonne numeriche:
cols = {"A", "B", "C"};
type = {};
For(i = 1, i <= N Items(cols), i = i + 1,
type[i] = Match(cols[i],
"A", Expr(Character),
Expr(Numeric);
);
);
For(i = 1, i <= N Items(cols), i = i + 1,
dt << New Column(cols[i], Eval(type[i]), Nominal);
);Il comportamento previsto sarebbe quello di creare una colonna Carattere e due Numerici. Che cosa fa ignorare il tipo di espressione [i] qui?
Ri: Creazione di una tabella con JSL, problema con "Nuova colonna"Alcuni elementi all'interno di una funzione Nuova colonna () non vengono valutati quando analizzati e pertanto richiedono che siano istruzioni JSL complete quando elaborate. La funzione Substitute () consente di farlo. Ecco il codice che vorrei usare per fare quello che stai facendo:
dt = New Table( "Example" );
cols = {"A", "B", "C"};
type = {};
For( i = 1, i <= N Items( cols ), i = i + 1,
Eval(
Substitute(
Expr(
dt << New Column( cols[i], __type__, Nominal )
),
Expr( __type__ ), Match( cols[i], "A", Expr( Character ), Expr( Numeric ) )
)
)
);Ri: Creazione di una tabella con JSL, problema con "Nuova colonna"Funziona! Estendendo questo puoi fare
Eval(
Substitute(
Expr(dt << New Column(__cols__, __type__, ...)),
Expr(__cols__), cols[i],
Expr(__type__), type[i],
...
);
);
Grazie!