Hallo zusammen,
Ich aktualisiere ein Skript, an dem ich gearbeitet habe. Nach Abschluss der Analyse möchte ich ein Bild des Berichtsfensters speichern und dann ein Skript in der Datentabelle speichern, das das Bild öffnet, wenn der Benutzer dies wünscht Das. Bei jeder Analyse wird ein neues Berichtsbild generiert, und ich muss das Skript in der Datentabelle speichern, auf die der aktualisierte Dateiname verweist (alle befinden sich im selben Verzeichnis).
Randbemerkung: Ich muss den Bericht als Bild speichern, da ich einige temporäre Datentabellen habe, auf die bei der Erstellung des Berichts verwiesen wird, und ich diese Datentabellen nicht speichern möchte – obwohl ich sie im Datentabellenskript speichere Wäre auch cool, wenn jemand eine Lösung dafür hätte.
Was mir jedenfalls schwerfällt, ist, dass beim Speichern des neuen Skripts in der Datentabelle die Variablen in mein Hauptskript geschrieben werden, nicht die Zeichen, die ich möchte. Ich habe Eval Insert() und Eval(Substitute(Expr())) ausprobiert, um das zu erreichen, aber nichts funktioniert.
Nachfolgend finden Sie ein Beispiel für eine solche Ausgabe der Analyse:

Die Analyse erstellt tatsächlich eine weitere Datentabelle, um das GB-Bild unten rechts zu erstellen, diese Datentabelle:

Aber wenn die Analyse abgeschlossen ist oder der Benutzer eine Analyse für eine andere Spalte durchführt, wird diese Datentabelle gelöscht und ich habe keinen Verweis mehr darauf – ich habe versucht, das <
Stattdessen muss ich das Fenster als PNG speichern, was in Ordnung ist und wie das erste Bild oben aussehen sollte, aber als PNG. Eine Iteration des Codes im Skript, in dem ich dies mache, ist hier:
Button Box( "Save Results to DT",
path = dt << Get Path; //gets the dt's path
l = Length( path ) - Length( dt << GetName ) - 4; // takes off dt name and .jmp extension
dir = Left( path, l ); //actual path where the PNG file is supposed to be saved
If( N Items( Icols ) == 0 & N Items( Xcols ) == 0,
pic_name = "Self_Corr_" || ycols[1] || ".png"; //name of the picture
nwin[Outline Box( 1 )] << Save Picture( dir || pic_name, "png" ); //saves the report window as a PNG to the directory<BR /> full_name=dir||pic_name;
dt << New Script( "Self Corr of " || ycols[1], Open( full_name ) ); // the new script is supposed to substitute the actual dir name and pic_name, not the variables.
);
)
Es erstellt ein Skript für die Datentabelle, das wie folgt aussieht:

Aber das Skript sollte stattdessen so aussehen:

Wo ich kopiert/eingefügt habe, was im Skript enthalten sein sollte, um zu zeigen, was das Hauptskript tun soll. Das sollte machbar sein, aber alle Versuche, die ich unternommen habe, funktionieren nicht.
Wie bereits erwähnt, bin ich damit einverstanden, die Berichte als PNGs zu speichern, und der Benutzer öffnet den Bericht einfach als PNG in JMP. Wenn möglich, möchte ich die temporären Datentabellen jedoch lieber in New Script() speichern, damit sie beim Öffnen des Berichts als PNG gespeichert werden Wenn der Benutzer auf das Skript klickt, wird die benötigte temporäre Datentabelle für die volle interaktive Fähigkeit generiert, aber ich vermute, dass das schwieriger sein wird.
Vielen Dank für jede Eingabe oder Anregung!,
DS
Sie können die Tabellenerstellung bei Bedarf als Tabellenskript speichern, diese können jedoch recht groß werden und viel Platz beanspruchen. Sie können das Bild auch in einer Tabelle speichern. Nachfolgend finden Sie drei verschiedene Optionen. Denken Sie daran, zu überprüfen, wie die Skripte in der Tabelle aussehen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Saving table creation
dt_script = dt << Get Script;
Eval(EvalExpr(
dt << New Script("Create Table", Expr(Name Expr(dt_script)));
));
// Saving image
img = Open("$SAMPLE_IMAGES/windmap.png", "png");
Eval(EvalExpr(
dt << New Script("Open Image",
New Window("Image",
Picture Box(Expr(img));
)
)
));
// Saving filepath which will open the image
file_path = "$SAMPLE_IMAGES/windmap.png";
Eval(EvalExpr(
dt << New Script("Open File from Path",
Open(Expr(file_path))
)
));
Übrigens, haben Sie darüber nachgedacht, hierfür JMP-Projekte zu verwenden?
Ich schließe mich Jarmos Vorschlag an, sich als Lösung ein JMP-Projekt anzusehen.
Hallo @jthi Und @txnelson ,
Vielen Dank für das schnelle Feedback und die Ideen. Ich schätze die verschiedenen Optionen zum Speichern des Skripts in der Datentabelle. Am Ende habe ich mich für das Bild entschieden, weil sich das Speichern der temporären Datentabelle und das anschließende Aufrufen dieses Skripts mit dem neuen Skript als kompliziert herausstellte.
Ich habe dafür Projekte in Betracht gezogen, aber die Art und Weise, wie die Benutzer damit interagieren, wird meiner Meinung nach in einem Projektformat nicht so hilfreich sein. Ich glaube, ich bin möglicherweise der Einzige in meiner Organisation, der Projekte verwendet. Wenn sich das ändert, würde ich auf jeden Fall darüber nachdenken, den Code zu aktualisieren.
Nochmals vielen Dank für all die Hilfe!,
DS