Risparmia memoria durante la concatenazione verticale in loopSaluti!
Sto cercando di concatenare i risultati delle query, da diverse tabelle in una directory, in un'unica tabella. Sto utilizzando il loop per leggere/interrogare le tabelle e concatenare i risultati. La tabella dei risultati va bene, ma ciascuna tabella concatenata intermedia continua ad aprirsi consumando memoria.
Grazie per eventuali suggerimenti per evitare di aprire ciascuna tabella dei risultati intermedi ma semplicemente aggiornare il frame di dati che può essere visualizzato come tabella dei risultati solo dopo il completamento del ciclo.
Sto usando JMP 17 Pro.
names default to here(1);<BR />dirLoc=Pick Directory("Select a directory", "myDirectory\");
fileList = Files In Directory(dirLoc);
dt1 = open(dirLoc || fileList[1]);
dt1 << Select Where( :Amount >= 500 );
x=dt1 << Subset ( Output Table Name("T1") );
Close(dt1, NoSave);
For(i = 2, i <= N Items( fileList ), i++,
dt = open(dirLoc || fileList[i] );
dt << Select Where( :Amount >= 500 );
y = dt << Subset ( Output Table Name("Temp"));
x = x << Concatenate( y);
Close(dt, NoSave);
Close(y, NoSave);
);
result = x<<SUBSET></SUBSET>
<LINGO-LABS id="lingo-labs-718508" slang="en-US" mode="CREATE"><LINGO-LABEL>Automazione e scripting</LINGO-LABEL></LINGO-LABS>Re: Risparmiare memoria durante la concatenazione verticale in loopThere might be some misunderstanding here. Doing x << Concatenate( x, y ) will not update x, it will create a new table.
To update x with the values of y, use the literal expression x << Concatenate( y, "Append to First Table" )
Inoltre, pensa a fare tutto questo come tabelle private per risparmiare risorse, quindi alla fine mostra la tabella, in questo modo:
Names Default To Here( 1 );
dirLoc = Pick Directory( "Select a directory", "myDirectory\" );
fileList = Files In Directory( dirLoc );
dt1 = Open( dirLoc || fileList[1], Private );
dt1 << Select Where( :Amount >= 500 );
x = dt1 << Subset( Output Table Name( "T1" ), Private );
Close( dt1, NoSave );
For( i = 2, i <= N Items( fileList ), i++,
dt = Open( dirLoc || fileList[i], Private );
dt << Select Where( :Amount >= 500 );
y = dt << Subset( Output Table Name( "Temp" ), Private );
x << Concatenate( y, "Append to First Table" );
Close( dt, NoSave );
Close( y, NoSave );
);
x << Set Name( "Result" );
x << New Data View;
Re: Risparmiare memoria durante la concatenazione verticale in loopGrazie per il tuo suggerimento di aggiungere invece di concatenare. In realtà ho provato ad aggiungere come mostrato di seguito. Il problema è che viene visualizzata tutta la tabella intermedia ogni volta che viene aggiunta al ciclo.
x << Concatenate(x,y);
Qualche pensiero?
Re: Risparmiare memoria durante la concatenazione verticale in loopÈ necessario aggiungere le tabelle concatenate. Per impostazione predefinita, JMP concatena le tabelle in una nuova tabella.
names default to here(1);dirLoc=Pick Directory("Select a directory", "myDirectory\");
fileList = Files In Directory(dirLoc);
dt1 = open(dirLoc || fileList[1]);
dt1 << Select Where( :Amount >= 500 );
x=dt1 << Subset ( Output Table Name("T1") );
Close(dt1, NoSave);
For(i = 2, i <= N Items( fileList ), i++,
dt = open(dirLoc || fileList[i] );
dt << Select Where( :Amount >= 500 );
y = dt << Subset ( Output Table Name("Temp"));
x << Concatenate( y, "Append to First Table" );
Close(dt, NoSave);
Close(y, NoSave);
);
result = x<<SUBSET></SUBSET>