Si tratta di un bug o mi sfugge qualcosa?Ho una tabella (qui semplificata e chiamata "TestBug.jsl" allegata) che viene utilizzata per generare alcuni numeri casuali e quindi effettuare un calcolo basato sulla variabile della tabella; chiamiamola la mia "tabella simulatore" poiché ogni volta che la ricalcolo, questa sarebbe una simulazione che voglio ripetere più volte.
quindi ho il seguente script per automatizzare l'esecuzione della stessa simulazione più volte con input diversi e concatenare le tabelle risultanti in una tabella "risultati".
Per testare, basta eseguire lo script con TestBug.jsl come tabella dati corrente,
Names Default To Here(1);
VarList={1,2,3,4};
New Namespace(
"MyNS"
);
MyNS:Simulator = Current Data Table();
MyNS:FinalT=MyNS:Simulator<
<SUBSET></SUBSET>
<P>Fondamentalmente lo script itera e modifica le variabili della tabella nella tabella del simulatore in base a un elenco di input e i numeri risultanti vengono concatenati in una "tabella dei risultati" (senza trasportare le formule ma solo i numeri)</P> <BR /> <P>Quindi, inizialmente, lo script crea una tabella dei risultati vuota che ha le stesse colonne del mio "simulatore", quindi modifica iterativamente la variabile della tabella nel "simulatore" e la concatena alla tabella dei "risultati"</P> <BR /> <P>Tuttavia, per qualche motivo, ogni volta che modifico il valore della variabile "simulatore", viene creata una nuova colonna a partire dalla seconda iterazione nella tabella "risultato" con lo stesso nome della variabile e riempiendola con il valore in uno strano schema (vedi immagine).</P> <BR /> <P>In pratica aggiunge il valore della variabile all'iterazione precedente nelle colonne attive per le nuove righe concatenate e il valore dell'iterazione finale a tutte le altre righe...</P> <P>Questo è fastidioso solo per alcune iterazioni, ma rende l'intero processo molto lento/bloccato per molte iterazioni.</P> <P>se salto "concatenate" o "set table variable" le colonne non vengono aggiunte.</P> <P>Non riesco a capire cosa sto sbagliando.</P>
<LINGO-LABS id="lingo-labs-906674" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automazione e scripting</LINGO-LABEL>
</LINGO-LABS>
Re: Si tratta di un bug o mi sfugge qualcosa?Vengono aggiunti lì a causa della variabile table. Ad esempio, potresti eliminare la variabile table dalla tabella del sottoinsieme dopo la creazione e dopo ogni concatenazione.
Scopri di più...
Names Default To Here(1);
VarList = {1, 2, 3, 4};
New Namespace(
"MyNS"
);
MyNS:Simulator = Datatable("TestBug");
MyNS:FinalT = MyNS:Simulator << subset(
Output Table("final table"),
Copy formula(0),
All rows,
Selected columns only(0)
);
MyNS:FinalT << Select All Rows;
MyNS:FinalT << Delete Rows;
Try(MyNS:FinalT << Delete Table Variable("myvar"));
advancementWin = New Window("Progress", TBsizes = Text Box(), );
For(is = 1, is <= Length(VarList), is++,
myVarVal = VarList[is];
TBsizes << set text(
"Simulating:" || Char(myVarVal) || "(" || Char(is) || "/" || Char(Length(VarList)) ||
")"
);
MyNS:Simulator << Suppress Formula Eval(1); //i need this as in the final version i make more changes and i want to avoid recalc of the random each change
MyNS:Simulator << set table variable("myvar", myVarVal);
MyNS:Simulator << Suppress Formula Eval(0);
MyNS:Simulator << Rerun Formulas();
MyNS:FinalT << Concatenate(MyNS:Simulator, Append to first table);
Try(MyNS:FinalT << Delete Table Variable("myvar"));
);
advancementWin << Closewindow();
Re: Si tratta di un bug o mi sfugge qualcosa?Grazie. Questo risolve il mio problema.
Se ho capito bene
Se si concatenano due tabelle con valori diversi per le variabili, viene aggiunta una nuova colonna per "tracciare il valore che aveva nelle tabelle originali".
Capisco perché uno voglia farlo, ma è un comportamento strano che crea confusione
Il tuo trucco risolve il problema, ma per completezza ho dovuto spostare il
Try(MyNS:FinalT << Delete Table Variable("myvar"));
prima della concatenazione