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