¿Es un error o me falta algo?Tengo una tabla (aquí simplificada y llamada "TestBug.jsl" adjunta) que se utiliza para generar algunos números aleatorios y luego hacer un cálculo basado en la variable de la tabla, llamémosla mi "tabla de simulación" ya que cada vez que la recalculo, esta sería una simulación que quiero repetir muchas veces.
Luego tengo el siguiente script para automatizar la ejecución de la misma simulación muchas veces con diferentes entradas y concatenar las tablas resultantes en una tabla de "resultados".
Para probar, simplemente ejecute el script con TestBug.jsl como tabla de datos actual.
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>Básicamente el script itera y cambia las variables de la tabla en la tabla del simulador de acuerdo a una lista de entrada y los números resultantes concatenados en una “tabla de resultados” (sin llevar las fórmulas sino solo los números)</P> <BR /> <P>Entonces, lo que hace el script inicialmente es crear una tabla de resultados vacía que tiene las mismas columnas que mi "simulador", luego cambia iterativamente la variable de la tabla en el "simulador" y la concatena a la tabla de "resultados".</P> <BR /> <P>Sin embargo, por alguna razón cada vez que cambio el valor de la variable “simulador”, se crea una nueva columna a partir de la segunda iteración en la tabla “resultado” con el mismo nombre de la variable y llenándola con el valor en un patrón extraño (ver imagen)</P> <BR /> <P>Básicamente, agrega el valor de la variable en la iteración anterior en las columnas activas para las nuevas filas concatenadas y el valor de la iteración final a todas las demás filas…</P> <P>Esto sólo es molesto durante unas pocas iteraciones, pero hace que todo el proceso sea muy lento o se bloquee durante muchas iteraciones.</P> <P>Si omito "concatenar" o "establecer variable de tabla", las columnas no se agregan.</P> <P>No puedo entender qué estoy haciendo mal.</P>
<LINGO-LABS id="lingo-labs-906674" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatización y scripting</LINGO-LABEL>
</LINGO-LABS>
Re: ¿Es un error o me falta algo?Se agregan allí debido a la variable de tabla. Por ejemplo, podrías eliminar la variable de tabla de tu tabla de subconjuntos después de crearla y luego después de cada concatenación.
Ver más...
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: ¿Es un error o me falta algo?Gracias, esto resuelve mi problema.
Si entiendo bien
Si concatenas dos tablas con diferentes valores para las variables se agrega una nueva columna para "rastrear el valor que tenía en las tablas originales"
Puedo entender por qué alguien quiere hacer eso, pero es un comportamiento extraño que resulta confuso.
Tu truco soluciona el problema, pero para completarlo tuve que mover el
Try(MyNS:FinalT << Delete Table Variable("myvar"));
antes de la concatenación