如何強制我的腳本按順序執行?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我目前的 JSL 腳本在單步執行時運作得很好,但是在執行時可能會拋出一些錯誤。我可以透過放入 wait() 函數來解決這個問題,但它並不總是有效。是否有一個簡單的函數可以在腳本頂部調用以使其按順序執行?
回覆:如何強制我的腳本按順序執行?嗯,顯然它並不像我希望的那麼樂觀。 某些程式碼在 onclose() 指令中無法正確執行。'dt << sort(...)' 在內部 onclose() 中沒有正確出現,但如果我將內部 onclose() 註解掉,它就可以正常工作。
回覆:如何強制我的腳本按順序執行?謝謝回覆。 我嘗試設置為函數,但它仍然不等待用戶輸入。對於重新編碼和值排序問題,我很熟悉它們,但我應該更加重視運行它們(或任何本機函數),因為莫代爾我希望在進入下一行程式碼之前可以以這樣的方式執行來完成該功能。
我明白你所說的關於使用 jsl 直接重新編碼的內容,但我希望 jsl + 本機 UI 的混合來運行一堆與其他任務始終相同的常見任務(硬編碼腳本很好)其輸入/輸出發生變化,因此適合本機UI,例如值排序和重新編碼。 我發現Craige 三月的帖子他在其中發布了可以執行此操作的內容,但由於列名 -> 函數視窗命名而受到一些限制。 就我而言,我會將字串中的列名稱放在頂部,所以這對我來說很好。 這裡它被修改為 2 個層級的互動性。 根據 JMP13 標準進行測試。
dt = Open( "$sample_data/big class.jmp" );
dt << Go To( :sex ) << Recode; // First interactivity, as a test, change "F" to "Female"
Window( "Recode" ) << onclose(
dt << Go To( :sex );
main menu("column info"); // second interactivity, as a test, change value ordering properties.
Window( "sex" ) << onclose(
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
);
);回覆:如何強制我的腳本按順序執行?當我編寫相當複雜的腳本時,我通常會對程式碼使用以下結構:
Main = Expr(
returna = A(passing variables);
returnb = B(passing variables);
);
A = Function({Passed variables},
processing code
);
B = Function({Passed variables},
processing code
);
// Enter the script by executing the Main section
Main;
關於您關於重新編碼和列資訊項目的問題,答案是「否」和「是」。 沒有直接函數可以從互動式 JMP 運行重新編碼元素。 這是因為在開放 JSL 中複製功能更容易。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt:Sex[ dt << Get Rows Where( :Sex == "F" )] = "Female";
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
// or
For Each Row(
If( :Sex == "F", :Sex = "Female",
:Sex = "Male"
);
至於列資訊對話方塊中的項目,格式、列屬性(例如值排序、規格限制等)都可以在 JSL 中變更為需要變更的內容。
所有這些都包含在腳本指南中
幫助==>書籍==>腳本指南
和/或在腳本索引中
幫助==>腳本索引
回覆:如何強制我的腳本按順序執行?
@tx尼爾森寫道:
我使用的方法是將腳本分解為功能元件,然後讓腳本的控制部分逐步執行腳本,並在需要時呼叫元件。我通常將程式碼放入 EXPR(() 部分。EXPR() 中的程式碼只有在被控制部分呼叫後才會被執行。
當您說在需要時調用元件時,您的意思是調用控制部分中的表達式並直接運行它,還是必須手動單獨調用它們才能完成前一個函數? 如果是前者,控制部分的結構如何能真正等待?
有沒有辦法將重新編碼和列資訊(以更改值順序)等本機函數呼叫為模式視窗/函數?
謝謝,
麥克風
回覆:如何強制我的腳本按順序執行?最佳實踐是向資料表傳遞要運行哪個平台的訊息,而不必追蹤哪個表是當前活動表。所以而不是:
dt = 資料表(“資料表xxx”);
dt << 清除選擇;
dt<<將視窗置於前面;
雙變數(X(......
dt = 資料表(“資料表xxx”);
dt << 雙變數(X(.........
確保雙變量平台將在“dt”引用的資料表上運行
回覆:如何強制我的腳本按順序執行?自動運行腳本時我遇到了幾個錯誤,但是當我手動測試它們時,一切都正常。
對於這些類型的錯誤,當我嘗試根據錯誤的表進行繪圖時,通常會發生這種情況
現在我在腳本中繪製繪圖/圖表之前添加這些行
dt = 資料表(“資料表xxx”);
dt << 清除選擇;
dt<<將視窗置於前面;
回覆:如何強制我的腳本按順序執行?得知您在這裡遇到麻煩,我感到很遺憾。
我們的目標是您永遠不需要等待()為了讓你的腳本運行。 我們確實知道,有時 UI 的各種元素(視窗、平台等)需要一段時間才能完全實例化,然後才能對 JSL 的其餘部分做出適當的回應。 但是,我們希望在內部解決這些情況,因此您不必在 JSL 中擔心它。
因此,當您遇到透過添加解決方案來解決的情況時等待()到您的程式碼中,請將它們提交到技術支援,這樣我們就可以追蹤它們並解決它們。
謝謝!
-傑夫
回覆:如何強制我的腳本按順序執行?我放等待(0);我想要順序執行的程式碼段之間的語句。
回覆:如何強制我的腳本按順序執行?我使用的方法是將腳本分解為功能元件,然後讓腳本的控制部分逐步執行腳本,並在需要時呼叫元件。我通常將程式碼放入 EXPR(() 部分。EXPR() 中的程式碼只有在被控制部分呼叫後才會被執行。