Teiltabelle zeigt weiterhin alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen geleert werden?I’m working on a JMP JSL script where I filter tables based on a vom Benutzer bereitgestellte Werteliste. I create filtered tables using Subset.
Mein Problem ist folgendes:
-
Beim ersten Durchlauf werden in der gefilterten Tabelle die korrekten Zeilen angezeigt.
-
Beim zweiten Durchlauf , wenn ich eine neue Liste eingebe, zeigt die gefilterte Tabelle manchmal noch Zeilen aus dem vorherigen Durchlauf an oder kombiniert alte und neue Zeilen.
-
I’m using Names Default To Here(1) and Clear Symbols() at the end of the script, but that Die Tabelle wird nicht vollständig aus dem JMP-Speicher gelöscht., so Subset seems to retain references to old rows.
Gibt es in JMP eine empfohlene Methode, um Speicherreferenzen für Tabellen vollständig zu löschen, bevor neue Teilmengen erstellt werden?
hows to make Subset filtering wiederholbar über mehrere Durchläufe without old data showing up?
Automatisierung und SkripterstellungDatenexploration und -visualisierungBetreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Können Sie ein Beispiel Ihres Skripts bereitstellen? Wenn Sie subset korrekt verwenden, werden keine "alten Zeilen" angezeigt.
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Könnten Sie bitte eine vereinfachte Version Ihres Codes teilen – so kurz wie möglich ?
... beginnend mit dem Laden einer Datentabelle, z. B.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Schnelle und hilfreiche Antworten auf Ihre Fragen
Schnelle und korrekte Antworten auf die richtigen Fragen
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Die meisten dieser Timing-Probleme lassen sich mit wait(0) beheben.
Fügen Sie es einfach nach dem Subset-Befehl ein – und vielleicht noch ein weiteres vor dem Subset-Befehl.
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?FilterByValueList = Function({sourceTbl, valueList, outName},
tempTbl = sourceTbl << Duplicate Window();
tempTbl << Clear Row States;
For(i = 1, i <= N Items(valueList), i++,
val = valueList[i];
tempTbl << Row Selection(
Select Where(:Batch Number == val, Current Selection("Extend"))
);
);
resultTbl = tempTbl << Subset(
Selected Rows(1),
Output Table Name(outName),
Invisible
);
Return(resultTbl);
);
// Example usage:
RunDataSubset = FilterByValueList(DataRuns, SelectedValues, "RunDataSubset");
MetaSubset = FilterByValueList(MetaRuns, SelectedValues, "MetaSubset");
//SelectedValues is a list
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Danke. Ich hatte vergessen, den Code einzufügen. Hier ist der Codeausschnitt als Referenz: Die Werte der Eingabeliste werden über ein Fenster gelesen und dann weiterverarbeitet:
// Directory path
pathDir = "J:\jmp-data\raw_data";
fileList = Files In Directory(pathDir);
Show(fileList);
selectedValues = {};
For(i = 1, i <= N Items(fileList), i++,
For(j = 1, j <= N Items(targetSource), j++,
If(Contains(fileList[i], targetSource[j]),
Insert Into(selectedValues, targetSource[j]);
Break();
);
);
);
countValues = N Items(selectedValues);
Show(selectedValues);
FilterByValueList = Function({sourceTbl, valueList, outName},
tempTbl = sourceTbl << Duplicate Window();
tempTbl << Clear Row States;
For(i = 1, i <= N Items(valueList), i++,
val = valueList[i];
tempTbl << Row Selection(
Select Where(:Batch Number == val, Current Selection("Extend"))
);
);
resultTbl = tempTbl << Subset(
Selected Rows(1),
Output Table Name(outName),
Invisible
);
Return(resultTbl);
);
// Example usage:
RunDataSubset = FilterByValueList(DataRuns, SelectedValues, "RunDataSubset");
MetaSubset = FilterByValueList(MetaRuns, SelectedValues, "MetaSubset");
Ich habe außerdem festgestellt, dass das Fenster, das zur Eingabe von Benutzerdaten erstellt wird, globale Variablen enthält, und das könnte der Grund dafür sein, dass alte Daten angezeigt werden:
SelectedValuestext = Select_Values_test0 <
<GET text=""></GET>
<BR /> <P><CODE class=" language-jsl"> SelectedValuesText0 = {}; - still has nothing so whenever I run the code again it should take new user input values if they are diff.
</CODE></P>
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Woher kommt der Ausdruck << Duplicate Window() und was soll er bewirken?

JSL bietet eine ganze Reihe leistungsstarker Funktionen, die Sie anstelle von `For()` verwenden können. Listen lassen sich schneller mit `Filter Each`, `Transform Each` und `For Each` durchlaufen, und die Auswahl kann höchstwahrscheinlich ohne Schleife mit `Contains()` erfolgen.
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Mir ist aufgefallen, dass es kein Duplikatfenster gibt, also habe ich das dt folgendermaßen erstellt:
dt = inputTable << Subset(All Rows, All Columns,Output Table("dt"),Invisible);<BR /><BR />
Ich weiß nicht, ob es einen einfacheren Weg gibt.
a = b funktioniert nicht. Für die Datentabelle suchte ich nach copytable(), fand aber copyfile().
</CODE></PRE>
<P>Diese Vorgehensweise erfordert außerdem, dass die Tabelle jedes Mal geschlossen wird. Ich fand das einfacher zu handhaben und umzusetzen.</P>
<PRE><CODE class=" language-jsl">
<BR />calcTable = Try( Data Table("KPI"), Empty() );
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Wenn Sie subset korrekt verwenden, werden keine "alten Zeilen" angezeigt.
Betreff: Teiltabelle zeigt immer noch alte Zeilen an – Wie kann der Speicher zwischen den Durchläufen gelöscht werden?Ich bin mir nicht sicher, warum Sie in diesem Fall zwei Teilmengen erstellen.
Names Default To Here(1);
path = Convert File Path("$SAMPLE_DATA/", windows);
files = Files In Directory(path);
targetfiles = {"Big Class.jmp", "Probe.jmp"};
files_of_interest = Filter Each({target}, targetfiles,
Contains(files, target);
);
create_filtered_table = function({dt, values, tablename}, {Default Local},
rows_of_interest = dt << Get Rows Where(Contains(values, :Filename));
dt_res = dt << Subset(Rows(rows_of_interest), Selected Columns(0), Output Table(tablename), Invisible);
return(dt_res);
);
dt1 = New Table("table1",
Add Rows(6),
Compress File When Saved(1),
New Column("Filename",
Character,
"Nominal",
Compact(),
Set Values({"Big Class.jmp", "a", "b", "c", "Big Class.jmp"})
)
);
dt2 = New Table("table1",
Add Rows(6),
Compress File When Saved(1),
New Column("Filename",
Character,
"Nominal",
Compact(),
Set Values({"Probe.jmp", "a", "b", "c", "Big Class.jmp"})
)
);
dt_res1 = create_filtered_table(dt1, files_of_interest, "Table1");
dt_res2 = create_filtered_table(dt2, files_of_interest, "Table2");