如何正確命名表?全部,
我知道如何為表設定名稱。 但有時,如果該名稱已經存在(偶然或在上次運行腳本後從左側開始),則該名稱將設定為“我的表 2”,而不是“我的表”。 如何正確地將其設定為我想要的設定?
我正在尋找執行此操作的一段程式碼 - 檢查具有此名稱的表是否存在,如果是,則關閉或重命名舊表,然後使用我要求的確切名稱來命名此表。
我嘗試了 Try() 函數,但我可能不完全理解它是如何工作的。 我嘗試了一些複雜的 if() 語句,這些語句獲取所有表的列表並迭代名稱等。它太長,並且在大量表上速度顯著減慢。
所以,我想知道,命名表的正確、常規方式是什麼,以便您確定表的命名完全如此?
回覆:如何正確命名表?我認為這種方法的唯一問題是......好吧,基本上你試圖透過編寫一個新函數來使 Set Name 使用起來更安全。 但在該函數中,您再次使用“設定名稱”,這很容易出現您試圖解決的相同問題...
但這對於您的直接表以及腳本本身來說應該不重要,所以我們在這裡很好。
此時我可能只是關閉舊表而不保存它們。回覆:如何正確命名表?是的,我就是這麼做的。 我可能不完全理解 Try() 是如何運作的。 讓我試試你的方法。回覆:如何正確命名表?正如我所提到的,我想避免拉出所有打開的表的清單。 當在一個腳本運行中產生數百個匯總表時,需要花費大量時間。回覆:如何正確命名表?我確信不同的社區成員可能有多種不同的方法來解決這個問題。這似乎是一種非常簡單的方法。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );回覆:如何正確命名表?我不知道有什麼傳統的方法(除了避免已經使用的名稱之外)。 我同意,在長時間正常運行後,追蹤所有打開的視窗可能會很困難。
這是執行您所描述的操作的一種 JSL 想法(在 JMP 14 中進行了測試)。 看來效率還蠻高的。 為了始終在全域範圍內可用,可以透過每次啟動 JMP 時自動執行的啟動腳本將函數新增為 Custom function()。
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));