La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?I’m working on a JMP JSL script where I filter tables based on a elenco di valori fornito dall'utente. I create filtered tables using Subset.
Il problema che sto riscontrando è:
-
Alla prima esecuzione , la tabella filtrata mostra le righe corrette.
-
Nella seconda esecuzione , se inserisco un nuovo elenco, la tabella filtrata a volte mostra ancora le righe dell'esecuzione precedente oppure combina righe vecchie e nuove.
-
I’m using Names Default To Here(1) and Clear Symbols() at the end of the script, but that non cancella completamente la tabella dalla memoria JMP, so Subset seems to retain references to old rows.
Esiste un metodo consigliato in JMP per cancellare completamente i riferimenti di memoria per le tabelle prima di creare nuovi sottoinsiemi?
hows to make Subset filtering ripetibile su più esecuzioni without old data showing up?
Automazione e scriptingEsplorazione e visualizzazione dei datiRe: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Puoi fornire un esempio del tuo script? Se usi correttamente il sottoinsieme, non verranno visualizzate le "righe vecchie".
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Potresti condividere una versione semplificata del tuo codice, il più breve possibile ?
... iniziando con il caricamento di una tabella dati, ad esempio
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Ottenere risposte rapide e utili alle tue domande
Ottenere rapidamente le risposte corrette alle domande corrette
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?La maggior parte di questi problemi di temporizzazione possono essere risolti tramite attendere(0).
Basta aggiungerlo dopo il comando subset e magari un altro prima del comando subset.
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?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
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Grazie. Ho dimenticato di incollare il codice, ecco lo snippet di riferimento; leggo i valori dell'elenco di input tramite una finestra e poi seguo:
// 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");
Ho anche scoperto che la finestra creata per ricevere l'input dell'utente contiene variabili globali e questo potrebbe essere il motivo per cui vengono visualizzati dati vecchi:
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>
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Da dove viene << Duplicate Window() e a cosa dovrebbe servire?

JSL offre molte funzioni potenti che potresti usare al posto di For() ovunque. Puoi scorrere le liste più velocemente usando Filter Each, Transform Each, For Each e molto probabilmente puoi effettuare la selezione senza loop usando Contains().
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Mi sono reso conto che la finestra duplicata non esiste, quindi ho continuato a creare il dt in questo modo:
dt = inputTable << Subset(All Rows, All Columns,Output Table("dt"),Invisible);<BR /><BR />
Non so se esiste un modo più semplice.
a = b non funziona. Per la tabella dati, stavo cercando copy table(), ho trovato copy file(),
</CODE></PRE>
<P>Inoltre, creare in questo modo richiede che il tavolo sia sempre chiuso. Ho trovato questa soluzione più semplice da gestire e consegnare.</P>
<PRE><CODE class=" language-jsl">
<BR />calcTable = Try( Data Table("KPI"), Empty() );
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Se si utilizza correttamente il sottoinsieme, non verranno visualizzate le "righe vecchie".
Re: La tabella dei sottoinsiemi continua a mostrare vecchie righe: come liberare la memoria tra un'esecuzione e l'altra?Non sono sicuro del motivo per cui stai creando due sottoinsiemi in questo caso
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");