揚聲器
|
成績單
|
| 喬丹希勒 |
大家好。 我是喬丹·希勒(Jordan Hiller),這次演講是“竊取代碼”! 從增強日誌中獲得的腳本的三個升級。 |
| |
這就是本次演講的靈感來源。 這是艾比·霍夫曼(Abbie Hoffman)的書,她是一位煽動者和活動家。 是的,他給他的書起了個名字,《偷這本書》,這是一個很棒的書名。 不確定用這個名字來命名你的書是否是一個很好的商業計劃,但無論如何,它非常吸引人。 |
| |
那麼為什麼要竊取這段代碼呢? JMP 希望你竊取代碼。 這個想法是您在 JMP 中點擊並進行分析, |
| |
並且您的點擊背後的代碼將被保存。 它保存在增強日誌中,您可以獲取並重複使用它。 |
| |
這大約是您製作腳本的 90%。 你將抓住它並重複使用它,這樣你就可以 |
| |
自動執行常見任務,只需單擊一個按鈕即可完成,而不是一系列點擊。 這就是這裡的全部目標,你要保存 |
| |
增強日誌中的腳本,這就是骨頭,即生產腳本的骨架。 |
| |
剩下大約 10% 的內容需要您自己編寫,這就是我們本次演講的目標。 我們將討論一些將製作腳本結合在一起的結締組織。 |
| |
所以在這次演講中,我將重點關注你,你知道,而不是關注語法的實質內容, |
| |
更多關於大局的內容,這符合我認為學習 JSL 編程的好方法。 最好採用現有代碼並通過示例進行學習。 使用該代碼。 |
| |
找到可以完成您想做的事情的片段。 您可以在 JMP 用戶社區或腳本指南中找到它。 |
| |
只需複制它並進行調整以供您使用。 您不必了解語法的所有復雜性。 那樣你就會走得很遠。 隨著經驗的積累,語法的學習也會隨之而來。 |
| |
因此,我們將討論三個案例研究,說明您可以通過增強日誌來增強代碼,但首先讓我們回顧一下 JSL。 也許這是對你們中的一些人的一些 JSL 基礎知識的介紹。 |
| |
因此,如果您剛開始接觸 JSL,那麼了解 JSL 的重要一點是一切都是對象。 你所擁有的一切 |
| |
想要做的事情是一個對象,因此包括數據表和數據表中的列,以及平台,如分發平台、圖形生成器、Fit Y by X, |
| |
以及來自這些平台的報告。 因此,當您擁有對象時,對它們進行操作的方式就是向它們發送消息。 所以對象接收消息。 這是我從增強日誌中復制的一個非常簡單的示例。 |
| |
打開示例數據目錄中的Big Class數據表,運行一個簡單的分佈分析,對吧。 這就是代碼的樣子,只是從日誌中復制的。 |
| |
現在。 |
| |
我們要做的,第一件事就是給數據表命名。 給它一個名字,為此我從第五行獲取了代碼並對其進行了增強。 我 |
| |
在其餘部分之前,在語句的 open 部分之前添加這個 bctable= ,好吧。 其作用是,當我們打開該數據表時,我們創建這個名稱 bctable。 你知道,我選擇了 bctable,你會在文檔中看到 dt。 使用你想要的,這是你分配的。 |
| |
因此,讓我們通過突出顯示它並單擊運行按鈕來運行它,打開 Big Class 並同時指定名稱 bctable。 現在這樣做的好處,為什麼它很重要,因為現在我有了這個 |
| |
處理。這是我稍後可以在代碼中使用的一個鉤子,bctable。 每當我說 bctable 時,我指的是 Big Class。 |
| |
所以 |
| |
這是下一行,但是分發命令,我也修改了它。 你知道,在之前的日誌中,這是一個赤裸裸的分發命令。 它沒有... |
| |
它不是指向數據表。 當您以這種方式運行它時,JMP 將僅在具有焦點的數據表上運行它, |
| |
當前的數據表,恰好是一個大類,因為你就在那之前打開了它,好吧。 但明確表達總是好的。 明確說明要操作哪個數據表是個好主意,因此我們將以這種方式運行它。 |
| |
bctable,然後是雙箭頭,然後是分發命令。 這就是我們添加的內容,帶有雙箭頭的 bctable。 |
| |
這是發送消息的語法。 因此,我們將右側的分發消息發送到左側的數據表,即 bctable 的名稱。 當我將鼠標懸停在 bctable 上時,您可以看到這是 Big Class。 所以運行整個事情, |
| |
我們得到分佈報告 |
| |
我們想要的。 |
| |
現在……我們可以更進一步,而且通常我們需要這樣做。 我們將在運行時為平台創建一個名稱,所以 |
| |
這是包含雙箭頭和等號的一行,好吧。 所以讓我們呃...讓我們從右到左讀這個。 我們將獲取該分發消息並將其發送到 bctable。 |
| |
所有這一切的結果,即平台,我們將保存在我稱之為 distplat 的變量中。 |
| |
讓我們運行一下吧。 |
| |
好吧,看起來一樣,但不同的是現在我有了這個 JSL 變量 distplat,我可以稍後在我的代碼中使用它。 |
| |
你會用它做什麼? 您可以使用它向輸出添加紅色三角形選項,所以在這裡讓我們把它... |
| |
讓我們把分佈報告帶到您可以看到的地方。 |
| |
我們將採用 distplat 對象,這就是......這就是分發平台。 |
| |
看,將鼠標懸停在它上面,讓我們運行這條線。 在分發平台中打開正態五分位數圖。 就在那裡。 |
| |
好的。 |
| |
最後一步是佔領平台,將這個物體帶到這裡,然後 |
| |
從中獲取一個報告,一個報告對象。 就是這一行。 將報告消息發送到平台對象,現在我們得到一個報告對象。 |
| |
如果您想訪問代碼中的這些值(報告中的任何數字或圖形或圖形元素),我們需要這樣做,您將需要這個,好吧。 這個對象rdistplat。 所以只需再運行一次,rdistplat。 |
| |
我運行了它,你看不到任何可見的東西,但現在發生的事情是我有了這個對象,rdistplat。 它說它是一個顯示框,稍後我們將討論如何使用它來訪問報告中的數字。 |
| |
好的,我要清除我的日誌 |
| |
並從我們的開始 |
| |
實例探究。 |
| |
因此,我們要學習的第一項技術是在數據表中的不同列上一遍又一遍地重複相同的命令,使用 foreach 命令循環遍歷列。 所以 |
| |
這是一個非常常見的需求,有時您需要做的只是一些簡單的事情,例如更改列的格式或建模類型。 |
| |
它可能非常複雜,比如 |
| |
採取...對列進行轉換並運行控製圖並使用該控製圖執行某些操作。 所以是的,它可以擴展;這種技術可以擴展。 |
| |
以下是我們如何在 JSL 代碼中實現這一目標。 我們先點擊右鍵,做我們想做的事。 對單個列執行此操作,然後我們將使用增強日誌獲取該代碼, |
| |
這就是我們腳本的骨架。 我們將對其進行修改,以便循環遍歷我們想要執行該操作的所有列。 |
| |
我們要使用的 for 循環、迭代方法是 foreach,這是在 JMP 16 中引入的,因此該技術在早期版本的 JMP 中不起作用。 |
| |
這也使用了一個稱為 JSL 列表的概念,因此我們也將稍微討論一下。 |
| |
好的,我要開始了 |
| |
在 JMP 中,讓我從主窗口開始。 |
| |
我要...讓我檢查一下日誌,確保它是乾淨的。 不,我必須刪除一件事,清除日誌。 好的,讓我們點擊我們想要做的事情。 我將打開一個名為 sc20 的數據表。 |
| |
您可以在網上找到的演示材料中找到該數據表。 |
| |
看看這個數據表,它有一個 ID 列,然後它有大約 20 個 |
| |
數據列。 這些有很多很多小數位,精度太高,我想將其截斷到小數點後兩位。 因此,讓我們更改格式,以便僅顯示數據的前兩位小數。 |
| |
這是一個簡單的點擊操作。 右鍵,進入欄目信息, |
| |
我們將把顯示格式從默認的最佳值更改為固定兩位小數。 |
| |
好的,現在我們對 NPN1 執行了此操作,我們還想對其他 19 個列執行此操作。 |
| |
那麼讓我們檢查一下增強日誌。 |
| |
就是這樣,這就是我們需要實現更改一列 NPN1 格式的代碼,對吧。 然後要重用它,請轉到紅色三角形,您可以將腳本保存到剪貼板,甚至保存到新的腳本窗口。 |
| |
我將切換到另一個文件,我已經在其中完成了一些工作,因此我們可以進一步深入研究這一點。 |
| |
好的。 |
| |
所以這裡的前兩行...三行,這是日誌中的代碼。 好吧,我們要做的第一件事就是打開數據表。 |
| |
您可能已經註意到我已經編輯了一點,我編輯了我的長路徑名,我的長目錄路徑到該文件。 |
| |
如果你這樣運行的話 |
| |
只要 JMP 數據表 sc20 與此 JSL 文件位於同一目錄中,它就可以工作。 因此,這就像您當前所在目錄的本地文件路徑。 |
| |
所以無論如何,我們只是從日誌中打開數據表,然後我們在這裡應用格式更改,固定十進制 10 個字符兩位小數。 |
| |
表...左側的列引用是尋址列的一種方法。 有幾種不同的方法,但這是您在冒號中看到的一種非常常見的方法。 表 ref...ref...reference 位於冒號左側,列名稱位於冒號右側。 |
| |
所以這又是直接來自日誌。 |
| |
JMP在日誌中就是使用這種方式來尋址數據表的。 我認為最好按照我們討論的那樣進行,最好在打開 JSL 名稱時給出該名稱,然後繼續使用該 JSL 名稱。 所以我把冒號之前的這個業務改為dt。 |
| |
所以這是相同的代碼,只是......只是修復了一點,當我運行它時,是的,它具有正確的效果。 它打開數據表,然後 |
| |
將格式更改為兩位小數。 好的,是的,現在我們有了這個,這是一件很容易的事情 |
| |
更改所有其他 19 列,對吧。 這裡...這裡是 NPN1,然後我可以復制該行並更改每個人並再寫 19 次。 |
| |
是的,這當然是低效的,編程的偉大之處之一就是你......你不必多次做同樣的事情,對吧。 因此,如果我們……如果我們只寫一次,而不是寫 19 次、20 次,那麼維護起來就會更容易。 |
| |
我們是這樣做的。 我們要做的第一件事是獲取我們想要操作的所有列的列表。 |
| |
當我說一個列表時,我指的並不是一個通用的列表。 我正在談論 JSL 列表,我正在談論您在 JSL 中編程時使用的特定數據結構。 |
| |
列表只是容器中包含的幾個對象,這就是我們使用它的方式。 因此,這裡有三種創建列對象列表的方法。 |
| |
第一種方法是手動執行,只需鍵入所有內容。 所以如果我要運行這個 |
| |
三個表參考...三個列參考,NPN1、PNP1、PNP2。 |
| |
請注意我的代碼中以及當我將鼠標懸停在該 CNames 變量上時的大括號。 當您看到那些大括號變量...那些大括號時,您就知道您正在處理 JSL 中的列表。 |
| |
好的,這是獲取列表的一種方法。 我們來談談其他幾種方法。 這就是我們最終將在本示例中使用的。 這是 |
| |
說,嘿,獲取我當前數據表中的所有連續列,以及我在這裡命名的數據表中的所有連續列,dt。 所以消息對象,創建一個新列表。 |
| |
那麼讓我們來運行這個吧。 |
| |
現在,如果我將鼠標懸停在 CName 上,您會看到這就是我們想要的。 這是我們想要操作的所有 20 個列表。 |
| |
好的,最後一種方法是,您可以讓用戶選擇數據表中的哪些列。 看起來像這樣。 我只想選兩個。 讓我們選擇 IVP 和 PNP4,選擇兩列。 |
| |
如果我運行這個, |
| |
我們得到一個列表,其中僅包含數據表中選定的兩個列。 |
| |
好吧,但是,您獲得了該列表,下一個工作是將格式化行應用於列表中的每個項目,這稱為循環或迭代。 |
| |
所以這是老方法。 它使用 JMP 中的 for 命令。 這就是您在 JMP 16 之前要做的事情,我將其放在這裡,供您仍在使用 JMP 15 時參考。 但, |
| |
您知道,這有點複雜,並且難以尋找新用戶,因此,如果您在 JMP 16 中使用列表,則可以執行更緊湊、更易讀的操作。 如果我想對列表的每個元素重複一個操作,我可以對每個命令使用它。 |
| |
好吧,讓我們看看它在做什麼。 它需要三個參數,參數之間用逗號分隔,我們將從右向左排列它們。 |
| |
最後一個參數是格式命令,對,應用格式,而不是為 dt NPN1 執行此操作,而不是為一列執行此操作,而是在此處放置一個佔位符並選擇列表項;你選擇你想要的。 |
| |
對,這只是一個詞,一個變量名,你選擇它。 我選擇了列表項。 這就是我們的佔位符,這是我們要在列表中的每個項目上運行的命令。 哪個清單? 這份清單,好吧。 這就是我們的清單,這是第二個 |
| |
爭論。然後第一個參數是佔位符,對吧。 它告訴我們,我們正在使用該佔位符來保存列表中事物的值。 |
| |
它位於大括號中,因此如果您重用此代碼,請確保使用它。 |
| |
這就是整個事情的樣子,我沒有 20 多行代碼,而是只有三行代碼,其中包括打開數據表, |
| |
獲取列名稱列表,然後重複該操作...對所有 20 個連續列重複該操作。 運行整個過程,你會看到它是什麼樣子的。 |
| |
就是這樣。 現在每一列 |
| |
格式中顯示兩位小數。 |
| |
好的,這是一個非常簡單的例子,使用 for every 來做一些非常簡單的事情 |
| |
在一個柱子上。 |
| |
讓我向您展示一個稍微有趣的例子。 |
| |
這是一個示例,其中對於相同的數據集,對於 sc20, |
| |
我將為每一列製作一個控製圖,然後將這些控製圖附加到日記中,並將整個該死的東西保存為 PDF,好吧。 所以 |
| |
它對每個都使用相同的內容,並且具有相同的前兩個參數,您知道,列表項是第一個,第二個是列表名稱。 但現在我有很多代碼作為第三項......作為每個項的第三個參數。 |
| |
那麼我們開始吧。 讓我們運行整個腳本。 |
| |
打開、運行一堆控製圖,將它們放在日記中。 現在,如果我看看我的桌面,我就創建了這個東西,我的report.pdf,其中包含所有這些控製圖、第一頁以及用於分隔它們的分頁符。 所以第一頁,第二頁,第三頁。 |
| |
所以你也可以在自己的時間看一下這個例子。 它包含在演示材料中。 |
| |
好的,這就是我們要討論的第一個技術。 讓我們為下一個技術清除日誌。 |
| |
好的,從報告中提取一個值。 這種情況在 JSL 中經常發生。 你做了某種分析,也許是分佈,也許是回歸,你需要 |
| |
得到一些東西,從那裡收集一些東西。 也許它是平均值或中位數。 也許它是回歸的斜率係數或 P 值。 |
| |
這就是我們的工作,棘手的部分是,報告具有層次結構、高度嵌套的結構,沿著該層次結構、沿著該樹向下移動以準確找到我們想要的內容可能會有點棘手。 所以我要教你一個技巧。 |
| |
訣竅是我們要像往常一樣通過點擊進行分析,然後我們想要抓取的東西, |
| |
我將把文本顏色更改為紅色,只是進行較小的格式更改。 然後,當我們將該腳本保存到日誌中時,我們將使用它來學習如何解決該紅色項目 |
| |
在JSL。 那麼讓我們一起來看看吧。 |
| |
再次返回 JMP。 |
| |
我要打開 Big Class,好的舊 Big Class,讓我們在高度列上運行分佈。 |
| |
好吧,這是我的分佈報告,我想從中提取一些內容。 假設它是中位數,在本例中,中位數是63,我將把它放入JSL 變量中,以便以後可以重用它,並且您知道用它編寫或對其進行一些數學運算或類似的操作。 |
| |
這裡有一個技巧,可以幫助您了解如何...解決數字 63。 |
| |
改變顏色,或者,你知道,字體或者其他我想要抓取的東西。 如果您從未見過這個,那麼如何做到這一點,這是值得了解的。 |
| |
工具欄上有一個屬性按鈕,我相信這是 JMP 16 中的新按鈕。 |
| |
因此,如果您打開此報告的屬性。 |
| |
我們可以沿著這棵樹走下去,找到我們需要的東西。 所以看看這個。 |
| |
數字列框,右側。 請注意,當我單擊報告的不同部分時,相應的 |
| |
item(它是一種顯示框)在屬性面板中突出顯示。 |
| |
好的,所以我們可以看到,這個包含所有這些結果的東西是一個數字列框,其中包含所有這些數字,就像,我告訴過你我們只是要拿這個東西,我要改變文本顏色為紅色。 |
| |
就這樣。 |
| |
現在我要關閉屬性面板。 |
| |
報告出來了,我們把這個腳本發送到增強日誌。 |
| |
紅色三角形,將腳本保存到日誌中。 |
| |
現在查看該日誌。 |
| |
這就是我們想要的部分。 您知道,它具有分佈命令,其中部分將中位數和其他統計數據的文本顏色更改為紅色。 現在讓我們更詳細地看一下。 |
| |
好的,這是代碼...增強日誌中的相同代碼。 我只是將其複製到這裡並對其進行了一些格式化,以便我們可以更多地討論我們需要的內容。 |
| |
所以我們這樣做的全部原因是為了得到這部分,我們現在要解釋它,好吧。 它使用發送來報告,並在其中使用調度。 |
| |
我們將在這裡真正關注調度的四個參數。 我們需要前三個,第四個參數是改變顏色,這確實不是我們感興趣的。 我們感興趣的是解決顯示框的問題,我們想要的元素,好吧。 所以 |
| |
第一個參數是導航。 它告訴我們,向下到顯示框,這些實際上是輪廓框,向下到輪廓框 |
| |
這裡。那麼讓我們看看該報告。 我再次確信您已經在 JMP 中註意到,在報告中您有這些級別的嵌套,對吧,而我只是...... |
| |
外部輪廓盒分佈。 其中有一個輪廓框高度,其中有一個輪廓框分位數,而在該分位數內有一個是我需要提取的內容。 |
| |
這就是它告訴我的。 它告訴我要走下那棵樹。 我只需要高度和分位數,這將為我們識別它。 |
| |
好的。 接下來的兩個參數告訴我們一些關於這個的事情……我們正在嘗試的這個元素,我們變成了紅色。 它告訴我們......第三個說明了它是什麼,它是一個數字列框,我們在屬性中看到了這一點。 |
| |
第二個參數告訴我們標題 |
| |
該數字的列框。 這個是空白的 這個沒有標題,沒關係。 我們可以...我們仍然可以使用這些信息來獲取該數據,所以有時您會在這裡看到標題,有時則看不到。 |
| |
好的,現在我們有了這個,我們將獲取該信息並使用它 |
| |
提取中位數。 |
| |
這是執行此操作的代碼。 它從第 23 行開始,經過第 29 行。 |
| |
我們再次打開數據表, |
| |
命名分佈,執行連續分佈。 |
| |
您會注意到,我們沒有任何調度和發送報告,這是因為我們不需要在生產腳本中將其變為紅色。 |
| |
所以,是的,執行分佈分析,命名平台。 |
| |
這很重要,您必須...您正在訪問報表層。 您將使用這一行提取它,從而創建 rdist,即該報告對象。 |
| |
然後,這就是奇蹟發生的那一行。 這就是我們要抓住的地方 |
| |
中值,將其分配給 JSL 變量 mdn,對於這個,我們將把它寫入日誌。 因此,我將告訴您更多有關此內容的信息,但首先我們只運行一次,以便您了解它的作用。 |
| |
我要運行第 23 行,哎呀,讓我們這樣做吧。 讓我們運行第 23 行到第 29 行。 |
| |
進行了分發。 它不是紅色的,我們提取了中位數,它現在存儲在 mdn 中,您可以看到該變量的值為 63。 |
| |
中位數是 63。 完美的。 |
| |
好吧。 |
| |
這是我們提取的那一行 |
| |
中值,即報告中的數字 63。 |
| |
我們來看看吧。 我只是想在這裡調用它,以便我們可以 |
| |
當我們這樣做時,請參考這一點。 |
| |
這就是那條線。 它只是再次組織起來,以便我們可以單獨查看每個元素。 |
| |
63,報告的中值。 |
| |
以下是我們如何做到這一點。 |
| |
這稱為下標...下標。 當您在 JSL 代碼中看到方括號時,這意味著您為一個對象添加了下標。 該對像是某種容器,可以是顯示框, |
| |
通常是一個列表。 您也可以通過這種方式為列表添加下標。 所以我們正在做的是,是的,我們正在此報表對像中提取嵌套項目。 |
| |
我們要做的第一件事是高度輪廓框。 你記得這一點,然後從那裡我們進入分位數框,你記得這一點。 |
| |
現在我們來對地方了。 我們只需要抓住我們想要的東西,我們想要的是數字列框,對吧,因為它沒有 |
| |
我們可以使用的標題(就是上面的標題,沒有標題),而不是我們通過數字來引用它。 它是分位數輪廓框中的第一個數字列框。 |
| |
所以你可能會看著這個並對自己說,等一下,這裡有數字。 那也是一個數字欄框,不是嗎? 不,實際上不是。 這是一個字符串 col 框,請記住,如果您願意,您可以檢查所有這些內容。 這又是來自屬性。 |
| |
如果我點擊這裡, |
| |
數字列框、字符串列框、字符串列框。 在這裡看到他們嗎? 字符串...字符串數字,因此它是第一個數字列框。 |
| |
這將獲取所有這些數字。 |
| |
好的,我們需要做的最後一件事就是這個下標。 這樣下標表示,給我第六個元素...1,2,3,4,5,6。 這是中位數;現在是 63。 當我們運行這一行時,它會為報告添加下標;它抓住了中位數,以便我們以後可以重用它。 |
| |
因此,有一種方法可以從報告中獲取某些內容。 我還有另一個例子,我將在演示材料中分享 |
| |
一個確實有標題的元素,你可以看到,如果你遇到這種情況,你可以使用它作為模型來完成你自己的工作。 |
| |
好吧,我們要討論的最後一件事是如何從運行腳本的用戶那裡獲取輸入。 |
| |
讓他們選擇要分析的文件,甚至是要分析數據表中的哪一列。 所以這可能是最常見的 |
| |
新手腳本編寫者想要做的事情。 您知道,我已設置腳本在一個專欄上執行某些操作,並且我想為組織中的其他人提供一些內容 |
| |
讓他們自己根據不同的數據來做,對吧。 因此,如果您......如果您以這種方式概括您的腳本,讓您的用戶選擇文件或列,或兩者, |
| |
你正在推廣你的腳本並且大大增加它的價值。 您將把它交給組織中的其他人。 他們可以復制您的工作并快速完成,而無需進行所有點擊。 |
| |
好的,在本節中,與其說是案例研究,不如說是一份清單。 我們將...我將向您展示三種可以讓用戶選擇文件的方法以及兩種可以用來讓用戶選擇列的方法。 |
| |
我們將從選擇文件的方法開始。 像往常一樣,我們首先在日誌中執行一些操作,然後復制它。 這是...這是打開 Big Class 時的樣子,您只需在日誌中找到此內容,然後打開 Big Class。 |
| |
dt。在本例中我使用 dt,因此,當我打開 Big Class 時, |
| |
現在它已經...dt 指向 Big Class,好吧。 然後我會繼續我的製作腳本,對吧。 |
| |
事情是這樣的,為了讓你的用戶選擇他們想要的文件,我們需要做的就是找到一種方法讓 dt 指向其他東西。 |
| |
編寫腳本的其餘部分,使用 dt,然後在開始時,您可以更改它。 dt不再僅僅指Big Class;它會指向別的東西。 |
| |
好吧,那是由用戶決定的其他事情, |
| |
運行腳本的人。 好吧,我認為這是您可以做的最簡單的事情,您可以...您可以使用這一行而不是打開數據表。 如果您在腳本開頭使用它來分配 dt, |
| |
這意味著 JMP 將運行此腳本並給出 dt |
| |
為前面的任何數據表命名。 |
| |
那麼從用戶的角度來看,他們所做的就是打開一個數據表,我這裡要打開sc20,並且使sc20 |
| |
我當前的數據表。 看到這裡了嗎? 該窗口中列出的是當前數據表。 |
| |
因此,如果您的用戶打開數據表,然後運行腳本,然後遇到此行,則 dt 現在將指向 sc20。 |
| |
所以這是一個非常強大的方法。 它的問題是......它要求您的用戶確切地知道要做什麼。 他們必須知道必須先打開數據文件,然後運行腳本。 |
| |
我們可以做一些更穩健的事情。 我們可以在他們運行腳本時向他們顯示文件選擇器,以便他們可以瀏覽目錄結構並找到要打開的正確文件。 |
| |
事實證明,這非常簡單。 你所做的就是刪除這裡的所有內容,刪除對 Big Class 的引用,然後直接說 open ,不帶任何參數。 |
| |
當 JSL 嘗試...當 JMP 嘗試解釋這一行時,它會說,好吧,用戶想要打開某些內容,但我不知道什麼...不知道什麼。 讓我們向他們展示一個文件選擇器,以便他們做出決定。 |
| |
那麼讓我們...讓我們運行這個。 dt = 打開。 |
| |
運行腳本。 這是通用文件選擇器,我將在我的桌面上打開 Iris。 |
| |
Iris 是打開的,當然,它有 dt 名稱。 |
| |
所有 JMP 文件,所有文件,對吧。 這裡可能會顯示很多東西。 |
| |
所以如果你需要更多的控制,哎呀,如果你需要更多的控制 |
| |
您的用戶將要做出的選擇,我們將使用稱為“選擇文件”的東西,而不是使用“打開”。 |
| |
選擇文件是一個具有幾個不同選項的命令。 我只使用其中三個。 |
| |
讓我們看一下這個例子。 因此,選擇文件的前三個參數是您將在選擇器窗口中看到的標題, |
| |
選擇器將啟動的目錄,以及告訴您可以從該選擇器打開哪些文件的過濾器,對吧。 那麼讓我們運行這...這一行,這一段代碼,pick file 命令,將結果保存在 PF 中。 |
| |
運行那個。 |
| |
好的,請注意,這就是這裡的爭論,選擇 Excel 文件。 這就是我們在窗口標題中看到的內容。 |
| |
文件夾,第二個參數中的路徑,那就是它的開始位置。 |
| |
第三位,文件過濾器,它說,嘿,只顯示用戶要打開的 Excel 文件,就在這裡。 我不被允許更改 Excel 文件。 我僅限於 Excel 文件。 |
| |
假設是三明治,然後單擊“打開”。 |
| |
嗯,等一下,為什麼沒有打開? |
| |
好吧,讓我們檢查一下。 PF 等於拾取文件。 什麼是PF? 啊,PF就是我們要打開的東西的路徑。 我們還沒有發出打開命令。 選擇文件不會打開文件,它只是選擇一個文件。 |
| |
因此,為了關閉這個循環,我們必須這樣做。 通過打開創建我們的表引用 |
| |
PF變量,它指向我們想要的文件,我們想要的excel文件。 |
| |
就在那裡。 這將打開三明治數據表,現在我有了我的 dt,並且準備好繼續執行我的腳本,就像我想要的那樣。 |
| |
讓我在這裡暫停一下,向您展示一些重要的事情。 選擇文件,如果您遇到類似的情況並且您不知道所有參數並且您想了解更多信息,請注意以下幾點。 首先你會得到一點 |
| |
將鼠標懸停在幫助上,會彈出一個小窗口,其中包含有關語法的一些信息。 這是一個更好的選擇。 在腳本窗口中右鍵單擊它, |
| |
您可以在腳本索引中查找它。 腳本索引對於任何 JSL 程序員來說都是一個非常重要的工具,並且 |
| |
它有您正在查找的命令。 它有參數列表、一些解釋性文本,而且非常重要的是,它有幾個示例,您可以運行它們並了解它的作用。 因此,如果我在這裡運行這個示例,它將給我一個選擇文件。 |
| |
好吧,它把我帶到了一個我不想去的地方。 |
| |
讓我們關閉它吧。 |
| |
好吧,然後我們就可以實驗並獲取此代碼,竊取此代碼並在我們的...腳本中使用它(如果我們願意的話)。 |
| |
好的,這就是腳本索引。 也可以從幫助菜單中找到它。 腳本菜單...看看上面的東西。 |
| |
當前數據表、裸露打開或拾取文件。 還有其他方法,但這三種方法都是不錯的選擇。 |
| |
現在我們來談談讓您的用戶選擇他們想要操作的列。 |
| |
我在這裡……我從日誌中復制了一些東西。 我打開了一個名為“價格”的數據表。我在上面做了一個圖表,顯示了蘋果隨時間變化的價格。 |
| |
我不會向您展示點擊部分,我只是要運行腳本。 我想您已經知道如何從增強日誌中提取腳本了,所以讓我們看看該腳本做了什麼。 打開價格,這是我的圖表,蘋果與日期,蘋果隨時間變化的價格。 |
| |
所以看看這個數據表,價格,是的,有蘋果,但我也有所有這些人,對吧。 那麼,如果我想讓我的用戶告訴我他們想要看到什麼圖表,他們想要看到哪一列的圖表呢? |
| |
這就是本節的主題,讓...讓您的用戶選擇。 |
| |
好的。 |
| |
所以我們將討論兩種方法。 這是第一個。 |
| |
它對用戶選擇的列進行操作。 |
| |
我們以前已經見過這種語法,我想,在我們的第二個案例研究中。 是的,這就是我們列清單的方式 |
| |
包含在數據表中選擇的列。 讓我回到那個數據表。 |
| |
我要選擇,也許三列, |
| |
我們跑吧 |
| |
這。實際上我認為我應該運行 dt。 讓我們運行這兩個。 |
| |
雞肉、咖啡和雞蛋。 |
| |
好的。 |
| |
所以。 |
| |
我想對哪一個進行手術? 好吧,您知道如何操作,如何使用循環迭代列表,但我們不這樣做。 我只想使用捷徑。 我要說你看, |
| |
如果我的用戶選擇了多個,只需為他們繪製第一個即可。 所以我的用戶在運行腳本之前選擇了雞肉、咖啡和雞蛋。 我只想給他們關於雞肉的圖表。 |
| |
是的,這就是下一行。 這是我們的訂閱。 我們對 CNames 列表進行下標以獲取第一項。 |
| |
所以我們將運行這個。 |
| |
現在我有了那個不錯的變量,我的同事, |
| |
其中包含列表中的第一項“雞”,以及帶有冒號的列引用。 |
| |
現在我們可以運行我們的圖形生成器了。 現在我們可以繼續我們的生活了,唯一的區別是我們已經用蘋果代替了這裡, |
| |
那現在是我的上校了。這是我們所做的唯一更改,因此運行此程序,我們將獲得雞肉價格的圖表。 |
| |
好的。 |
| |
好吧,這是一種方法,但同樣,就像我們之前討論的那樣,這需要用戶知道他們必須做什麼。 這需要... |
| |
方法要求用戶必須知道他們必須打開數據表,選擇它,然後運行腳本,這有點麻煩。 所以 |
| |
相反,在運行時向用戶顯示列選擇器對話框會更加穩健。 看起來是這樣的。 語法有點複雜。 我不會深入討論所有細節,從高層次上討論它。 我們像以前一樣打開數據表。 |
| |
我們正在使用這個稱為“欄對話”的命令 |
| |
向用戶顯示選擇器...列選擇器。 |
| |
同樣,它有很多論點。 我只用了幾個。 我正在做的是,嘿,給我一個選擇商品的按鈕,用戶最多可以選擇一列,並且他們必須至少選擇一列。 |
| |
所以在這裡,讓我們從第 60 行開始運行這個腳本。 |
| |
開盤價,這是我的對話,看看我用很少的代碼就有了多麼豐富的對話。 這就是我們使用的專欄對話的優點。 因此,我將選擇咖啡,然後單擊“確定”。 |
| |
好的。 回到腳本,我們剛剛運行了這一行。 |
| |
我們選擇的結果存儲在dlg中。 讓我們看一下。 |
| |
好吧,這有點複雜。 它說 dlg 是一個列表,請參閱大括號,我有一些嵌套的大括號,所以它就像嵌套列表。 |
| |
這是帶您到達那裡的訂閱。 我不會花很多時間解釋這一點,但如果您...如果您需要這樣做,您可以復制此代碼。 因此,要從對話中獲取提到咖啡的部分,即那裡提到咖啡的專欄, |
| |
這是創建我的 col 的下標,所以運行這一行。 |
| |
現在,我的列僅包含對咖啡列的引用,並且這與之前相同。 我們使用運行圖形生成器 |
| |
我的同事,用它代替蘋果,這樣我們就可以得到咖啡或用戶選擇的任何其他東西。 |
| |
好的,這就是我想與您分享的一切。 最後,我將為所有以這種方式開始 JSL 編程的人提供一些建議。 |
| |
我們的建議是,讓 JMP 盡可能地糾正您的代碼。 這就是增強日誌的用途,從日誌中竊取該代碼。 這就是你的大部分腳本, |
| |
然後你只需要編寫結締組織,即將東西結合在一起的部分,並將其製作成可用的生產腳本。 您也可以竊取該代碼。 您將從腳本索引中竊取它,您當然可以從該演示文稿中竊取它。 |
| |
本演示文稿中包含所有材料,您還可以從 JMP 用戶社區中的 JSL 食譜中獲取,這是一個很棒的資源,其中包含許多常見的 JSL 任務,並為您提供完成這些事情所需的代碼。 |
| |
我要再次強調,真的不要太在意語法。 獲取代碼並替換您需要的代碼會更容易。 您不會破壞任何東西,並且您將通過更多的經驗了解這種語法的微妙之處。 |
| |
非常感謝您的關注。 |