Schließen Sie alle Datentabellen, lassen Sie jedoch eine für die weitere Analyse offenHallo zusammen
Dies ist eine Fortsetzung des Beitrags:
https://community.jmp.com/t5/Discussions/JSL-How-to-close-data-tables-after-analysis/mp/36739
Beim Ausführen von JSL Debgger ist jedoch ein Fehler in meinem Skript aufgetreten.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Das Skript läuft einwandfrei, da es alle Tabellen außer dt4 schließt, aber ich erhalte eine Fehlermeldung, wie in der Datei angezeigt, die unter der If-Anweisung angehängt ist. Hat jemand eine Ahnung, worauf sich das bezieht?
Das Skript läuft einwandfrei und schließt alle Tabellen außer dt4. Allerdings treten bei der Erweiterung des Skripts nach diesem Punkt Probleme auf. Ich muss nach diesem Punkt ein Diagrammerstellungsskript für die dt4-Tabelle starten, aber es führt nichts aus. Daher frage ich mich, ob dieser Fehler das Skript stoppt, um mit den nächsten Schritten fortzufahren.
Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassenEs liegt daran, dass Sie >= 0 sind.Es gibt keine Datentabelle 0
entweder >= 1 oder >0 machen
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 1, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassenDanke für den Hinweis. Ich habe den Ansatz geändert und schließe jetzt die Datentabellen früher im Skript. Das Skript ist jetzt tatsächlich schneller. Danke
Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassenPhil, ich dachte das Gleiche.Es ist wichtig zu beachten, dass Tabellennamen keine Duplikate sein dürfen. Wenn Sie also versuchen, eine neue Tabelle mit dem Namen „dt4“ zu erstellen und es bereits eine „dt4“-Tabelle gibt, nennt JMP sie „dt4 2“.Tabellennamen entsprechen wahrscheinlich nicht Ihren Erwartungen, was ein weiterer Grund dafür ist, dass ich der Meinung bin, dass der obige Code eine schlechte Möglichkeit ist, das vorliegende Problem zu lösen.
Ich habe mir gerade den im Originalbeitrag verlinkten Beitrag angesehen.Der Code von Uday ist viel produktionsbereiter.Leider verwendet das OP die Vereinfachung von Txnelson, die nur eine Vereinfachung ist und bei der er alle seine Probleme hat.
Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassenIst „dt4“ der tatsächliche Name Ihrer Tabelle?Es klingt wahrscheinlicher, dass es sich um den Variablennamen handelt, den Sie für die Tabelle in Ihrem Skript definiert haben? Ich denke, Ihr Skript sucht nach dem Tabellennamen, also nach dem, was Sie oben in der JMP-Tabelle sehen, z. B. „Big Class“:
Dies ist ein einfaches Beispiel (aus dem Skriptindex) der Funktion „Get Name()“, die in Ihrem Skript verwendet wird:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Name();
Show( n );
Übrigens könnte ich mich irren, wenn ich annehme, dass dies die Ursache Ihres Problems ist!
Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassenIhre Tabellen könnten verknüpfte Tabellen sein. Siehe untenstehendes Beispiel.Das oder es liegt ein Fehler in Ihrem Skript vor und Sie verweisen versehentlich auf die falsche Tabelle.Dies liegt wahrscheinlich daran, dass Sie Tabellen nach Namen suchen.
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = dt1 << Summary(
Group( :height ),
Freq( "None" ),
Weight( "None" )
);
close(dt1, "nosave"); //closes both dt1 and dt2 since dt2 is dependant on dt1
In jedem Fall ist der obige Code eine schlechte Möglichkeit, mit schließenden Tabellen umzugehen.Erstens schließen Sie Tabellen, die nichts mit Ihrem Skript zu tun haben, was die Benutzer möglicherweise wütend macht, weil Sie die anderen Dinge geschlossen haben, an denen sie gearbeitet haben.Zweitens ist das Schließen nicht benötigter Tabellen bis zum Ende eine ineffiziente Speichernutzung.Es wäre eine bessere Vorgehensweise/ein besseres Muster, Tabellen direkt nach der Verwendung zu schließen, anstatt bis zum Ende des Skripts zu warten.Wenn die Tabellen für das gesamte Skript benötigt werden, würde ich empfehlen, den Überblick über die Tabellen in einer Liste zu behalten, sodass Sie nur diejenigen schließen, die sich auf Ihr Skript beziehen.
Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassenHallo Uday,
Ich habe dies geändert, erhalte aber immer noch den gleichen Fehler unter JSL Debugger.
Betreff: Alle Datentabellen schließen, aber eine zur weiteren Analyse offen lassen@ivomdb ,
Der angezeigte Fehler tritt normalerweise auf, wenn Sie auf eine Datentabelle verweisen, von der JMP nicht weiß, dass sie existiert, oder über keinen Verweis verfügt, über den auf die Tabelle zugegriffen werden kann. Dies geschieht meist, wenn der Datentabellenverweis verloren geht oder geschlossen wurde, bevor darauf verwiesen wird.
Eine Möglichkeit, dieses Problem zu beheben, besteht darin, wie folgt vorzugehen.
Sie sollten außerdem sicherstellen, dass die Tabelle nicht vorzeitig geschlossen wird.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
Current Data Table(Data Table(i)); // This should make the data table you are working with active and current
If( Contains( DontClose, Data Table( i ) << get name ),
Continue();
,
// else
Close( Data Table( i ), "No Save" );
)
);<BR />