Sparen Sie Speicherplatz beim vertikalen Verketten in einer SchleifeGrüße!
Ich versuche, Abfrageergebnisse aus mehreren Tabellen in einem Verzeichnis in einer einzigen Tabelle zu verketten. Ich verwende eine Schleife, um die Tabellen zu lesen/abzufragen und die Ergebnisse zu verketten. Die Ergebnistabelle ist in Ordnung, aber jede zwischengeschaltete verkettete Tabelle öffnet sich ständig und verbraucht Speicher.
Vielen Dank für alle Vorschläge, wie Sie vermeiden können, die einzelnen Zwischenergebnistabellen zu öffnen, sondern nur den Datenrahmen aktualisieren, der erst nach Abschluss der Schleife als Ergebnistabelle angezeigt werden kann.
Ich verwende 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>Automatisierung und Skripterstellung</LINGO-LABEL></LINGO-LABS>Betreff: Sparen Sie Speicher beim vertikalen Verketten in einer SchleifeThere 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" )
Denken Sie auch darüber nach, dies alles als private Tabellen zu tun, um Ressourcen zu sparen, und zeigen Sie die Tabelle am Ende wie folgt an:
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;
Betreff: Sparen Sie Speicher beim vertikalen Verketten in einer SchleifeVielen Dank für Ihren Vorschlag zum Anhängen statt zur Verkettung. Tatsächlich habe ich versucht, so viel wie unten gezeigt anzuhängen. Das Problem besteht darin, dass jedes Mal, wenn sie in die Schleife eingefügt wird, die gesamte Zwischentabelle angezeigt wird.
x << Concatenate(x,y);
Jeder Gedanke?
Betreff: Sparen Sie Speicher beim vertikalen Verketten in einer SchleifeSie müssen die verketteten Tabellen anhängen. Standardmäßig verkettet JMP Tabellen zu einer neuen Tabelle.
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>