關閉所有數據表,但保留一個打開以進行進一步分析大家好
這是該貼文的後續內容:
https://community.jmp.com/t5/Discussions/JSL-How-to-close-data-tables-after-analysis/mp/36739
但是,我在執行 JSL Debgger 時遇到了腳本錯誤。
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" )
)
);腳本運作良好,因為關閉了除 dt4 之外的所有表,但我收到一個錯誤,如 If 語句下附加的檔案所示。 有誰知道這指的是什麼?
該腳本運行良好並關閉除 dt4 之外的所有表,但是,在此之後擴展腳本時遇到問題。 我有一個圖形產生器腳本要在此時為 dt4 表啟動,但它不執行任何操作。 所以我想知道這裡的錯誤是否正在停止腳本以繼續執行後續步驟。
回覆:關閉所有資料表,但保留一個開啟以進行進一步分析這是因為你 >= 0。沒有數據表0
要嘛讓它 >= 1 要嘛 >0
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" )
)
);回覆:關閉所有數據表,但保留一個開啟以供進一步分析感謝您的建議。 我改變了方法,現在我關閉了腳本前面的資料表。 現在腳本實際上更快了。 謝謝
回覆:關閉所有資料表,但保留一個開啟以進行進一步分析菲爾我也在想同樣的事情。請務必注意,表名稱不能重複,因此,如果您嘗試建立名為“dt4”的新表,並且已經存在一個“dt4”表,JMP 會將其命名為“dt4 2”。表名不太可能是您所期望的,這是我認為上面的程式碼不是解決當前問題的糟糕方法的另一個原因。
我剛剛查看了原始帖子中鏈接的帖子。Uday 的程式碼更適合生產。不幸的是,OP正在使用txnelson的簡化,這只是一個簡化,也是他遇到所有問題的地方。
回覆:關閉所有數據表,但保留一個開啟以供進一步分析「dt4」是你的表的實際名稱嗎?聽起來更有可能是您在腳本中為表定義的變數名稱? 我認為您的腳本正在尋找表名稱,即您在 JMP 表頂部看到的內容,例如“Big Class”:
這是腳本中使用的 Get Name() 函數的簡單範例(來自腳本索引):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Name();
Show( n );
順便說一句,我可能錯了,這就是你問題的原因!
回覆:關閉所有資料表,但保留一個開啟以進行進一步分析您的表格可以是連結表。 請參閱下面的範例。或者您的腳本有錯誤並且您意外地引用了錯誤的表。這很可能是因為您正在按名稱查找表。
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
無論哪種方式,上面的程式碼都是處理關閉表的糟糕方法。首先,您將關閉與腳本無關的表,這可能會讓用戶因為您關閉了他們正在處理的其他事情而生氣。其次,將不需要的表留到最後關閉是對記憶體的低效利用。在使用後立即關閉表而不是等到腳本結束將是更好的做法/模式。如果整個腳本需要這些表,那麼我建議您追蹤清單中的表,以便您只關閉與腳本相關的表。
回覆:關閉所有資料表,但保留一個開啟以進行進一步分析嗨烏代,
我已經更改了此設置,但在 JSL 調試器下仍然遇到相同的錯誤。
回覆:關閉所有資料表,但保留一個開啟以進行進一步分析@ivomdb ,
如果您引用 JMP 不知道存在的資料表或沒有用於存取該表的引用,通常會出現您看到的錯誤。 這種情況主要發生在資料表引用遺失或在引用之前已關閉時。
解決此問題的一種方法是執行以下操作。
您還應該嘗試確保表不會過早關閉。
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 />