Posso usare le virgolette sui nomi delle colonne in una formula?Ciao,
Ho il seguente script semplificato in una tabella:
dataTable = Current Data Table();
If( !Contains( strColNames, "pears" ),
dataTable << New Column( "pears",
numeric,
"Continuous",
Formula( :"apples" + 2 )
)
);
Quando copio questo script in una nuova tabella (usando ctrl-c ctrl-v), che ha già una colonna piena di nome "mele", lo script finisce come:
dataTable = Current Data Table();
If( !Contains( strColNames, "pears" ),
dataTable << New Column( "pears",
numeric,
"Continuous",
Formula( As Column() + 2 )
)
);
Il riferimento alla colonna "mele" viene sostituito nella formula dall'istruzione As Column (). Lo script non funziona più. Risulta che la rimozione delle virgolette dal riferimento alla colonna "mele" nella formula ha risolto il problema.
Lo considero un bug. È, o è questo comportamento previsto?
Saluti, Radko
Ri: Posso usare le virgolette sui nomi delle colonne in una formula?Lo faccio in modo leggermente diverso. Io uso la funzione qui sotto per creare la colonna. Se la colonna esiste, restituisce semplicemente l'handle della colonna, se la colonna non esiste crea una nuova colonna e restituisce l'handle. Quindi l'uso sarebbe qualcosa del genere:
PearCol = createcol (dt, "pere", "NUMERICO"); // "NUMERIC" o "CHARACTER"
AppleCol = createcol (dt, "Mele", "NUMERICO");
PearCol << imposta ogni valore (AppleCol [] + 2);
Preferisco usare 'imposta ogni valore' ma puoi anche impostare una formula se ha più senso nella tua applicazione.
CreateCol = Function ({ct, ccn, ColType},
{predefinito locale},
CreateColExpr = Expr (
stuff = __CurDataTable__ << Nuova colonna (__ColName__, __ColType__)
);
stuff = Try (Column (ct, ccn), -1);
Attendi (0);
Se (roba == -1,
CreateColumn = Substitute (Name Expr (CreateColExpr),
Expr (__ColType__), Parse (ColType),
Expr (__CurDataTable__), Eval (ct),
Expr (__ColName__), Eval (ccn)
);
Mostra (CreateColumn);
Eval (CreateColumn);
);
cose;
);
Ri: Posso usare le virgolette sui nomi delle colonne in una formula?Dovrai gestire manualmente le virgolette. Guarda il codice qui sotto:
dataTable = Current Data Table();
If( !Contains( strColNames, "\!"pears\!"" ),
dataTable << New Column( "\!"pears\!"",
numeric,
"Continuous",
Formula( :Name( "\!"apples\!"" ) + 2 )
)
);