Ist das ein Fehler oder übersehe ich etwas?Ich habe eine Tabelle (hier vereinfacht und „TestBug.jsl“ genannt), die zum Generieren einiger Zufallszahlen und anschließenden Durchführen einer Berechnung auf Grundlage der Tabellenvariablen verwendet wird. Nennen wir sie meine „Simulatortabelle“, da dies bei jeder Neuberechnung eine Simulation wäre, die ich viele Male wiederholen möchte.
dann habe ich das folgende Skript, um die Ausführung derselben Simulation mehrmals mit unterschiedlichen Eingaben zu automatisieren und die resultierenden Tabellen in einer „Ergebnis“-Tabelle zu verketten.
Zum Testen führen Sie einfach das Skript mit der Datei TestBug.jsl als aktuelle Datentabelle aus.
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>Grundsätzlich iteriert und ändert das Skript die Tabellenvariablen in der Simulatortabelle entsprechend einer Eingabeliste und die resultierenden Zahlen werden in einer „Ergebnistabelle“ verkettet (ohne die Formeln, sondern nur die Zahlen zu enthalten).</P> <BR /> <P>Das Skript erstellt zunächst eine leere Ergebnistabelle mit denselben Spalten wie mein „Simulator“, ändert dann iterativ die Tabellenvariable im „Simulator“ und verknüpft sie mit der „Ergebnis“-Tabelle.</P> <BR /> <P>Aus irgendeinem Grund wird jedoch jedes Mal, wenn ich den Wert der Variable „Simulator“ ändere, ab der zweiten Iteration in der Tabelle „Ergebnis“ eine neue Spalte mit demselben Namen der Variablen erstellt und diese in einem seltsamen Muster mit dem Wert ausgefüllt (siehe Bild).</P> <BR /> <P>Im Grunde wird der Wert der Variablen bei der vorherigen Iteration in den aktiven Spalten für die neuen verketteten Zeilen und der Wert der letzten Iteration zu allen anderen Zeilen hinzugefügt …</P> <P>Dies ist nur bei einigen Iterationen ärgerlich, führt aber bei vielen Iterationen dazu, dass der gesamte Prozess sehr langsam wird bzw. abstürzt.</P> <P>Wenn ich das „Verketten“ oder „Tabellenvariable festlegen“ überspringe, werden die Spalten nicht hinzugefügt.</P> <P>Ich kann nicht verstehen, was ich falsch mache.</P>
<LINGO-LABS id="lingo-labs-906674" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatisierung und Skripting</LINGO-LABEL>
</LINGO-LABS>
Betreff: Ist das ein Fehler oder übersehe ich etwas?Diese werden dort aufgrund der Tabellenvariable hinzugefügt. Sie können beispielsweise die Tabellenvariable nach der Erstellung und dann nach jeder Verkettung aus Ihrer Teiltabelle löschen.
Mehr anzeigen...
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();
Betreff: Ist das ein Fehler oder übersehe ich etwas?Danke. Das löst mein Problem.
Wenn ich das richtig verstehe
Wenn Sie zwei Tabellen mit unterschiedlichen Werten für die Variablen verketten, wird eine neue Spalte hinzugefügt, um „den Wert zu verfolgen, den sie in den ursprünglichen Tabellen hatten“.
ich kann verstehen, warum man das tun möchte, aber es ist ein seltsames Verhalten, das verwirrend ist
Dein Trick löst das Problem, aber der Vollständigkeit halber musste ich die
Try(MyNS:FinalT << Delete Table Variable("myvar"));
vor der Verkettung