扬声器
|
成绩单
|
| 乔丹·希勒 |
大家好。 我是 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 任务,并为您提供完成这些任务所需的代码。 |
| |
再一次,我要强调的是,真的不要太在意语法。 获取代码并替换您需要的代码会更容易。 你不会破坏任何东西,而且你会随着更多的经验学习这种语法的微妙之处。 |
| |
非常感谢您的关注。 |