你好,我已经尝试在 JSL 中编写一段代码,其中根据某些变量的值,从图形生成器获得的图形会发生变化。
我现在的特定示例非常简单,我有一个复选框,根据用户选择(选中/未选中),我想使用本地过滤器在图表中添加或删除组。 这是一个非常简单的例子
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);正如您所看到的,我的 if 语句部分应该有问题,因为没有任何变化,情节保留了所有组。 当然,当我只删除 IF() 部分时,我的绘图会忽略 A 组。
我将非常感谢任何建议。
嗨,吉姆,我需要帮助来完成我迄今为止最先进的脚本。简而言之,脚本将要求用户输入 1-5 之间的寄存器编号
当我添加 while 语句或 if 语句时,脚本不执行任何操作。 if 仅添加一个表达式而不使用 while 或 if 语句,它可以正常工作。
但我试图对多个寄存器进行一半的工作,我通常会获取各个寄存器的文件,并希望使用单个脚本来涵盖所有 5 个品种。
提前致谢。
山姆
完整脚本如下
w = New Window( "输入要分析的寄存器号", // 打开一个带有标题和内容的窗口...
Border Box( top( 20 ), Bottom( 20 ), Left( 160 ), Right( 160 ), // 橱窗装饰
V List Box( // V 和 H 列表嵌套来组织显示框
H Center Box( Text Box( "在下面输入寄存器编号" ) ), // 第二个标题,居中
Spacer Box( size( 1, 10 ) ), // 一点垂直空间
// H 列表框( 文本框( "value 1: " ), 数字编辑框( v1 ) ), // 数据输入
H 列表框( 文本框( "输入寄存器编号:" ), Register_Num_teb = 文本编辑框( "", << 设置宽度( 200 ) ), ),
Spacer Box( size( 1, 10 ) ), // 一点垂直空间
H Center Box( // 按钮居中
Button Box( "Continue", // 按下按钮时运行该脚本...
寄存器 = Register_Num_teb << get text();
// 使用值创建一个新表...
/////////////////////////////////////////////////////////// /////////////////////////////////////////开始循环
而( 寄存器 == 1,
dothis = 表达式(
新列(“start_time”,数字,连续,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做这个;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
dothis = 表达式(
新列(“SoftStart_Accuracy%”,
数字,
连续的,
公式( ((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
做这个;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 寄存器 == 2,
dothis = 表达式(
新列(“start_time”,数字,连续,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做这个;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
dothis = 表达式(
新列(“SoftStart_Accuracy%”,
数字,
连续的,
公式( ((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
做这个;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 寄存器 == 3,
dothis = 表达式(
新列(“start_time”,数字,连续,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做这个;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
dothis = 表达式(
新列(“SoftStart_Accuracy%”,
数字,
连续的,
公式( ((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
做这个;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 寄存器 == 4,
dothis = 表达式(
新列(“start_time”,数字,连续,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做这个;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
dothis = 表达式(
新列(“SoftStart_Accuracy%”,
数字,
连续的,
公式( ((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
做这个;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
而( 寄存器 == 5,
dothis = 表达式(
新列(“start_time”,数字,连续,公式((:rise_time_scope_v_vout * 1000)/ 0.8))
);
做这个;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
dothis = 表达式(
新列(“SoftStart_Accuracy%”,
数字,
连续的,
公式( ((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
做这个;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
/////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// (可选)关闭对话框。 或者,您可能想再次运行它......
w << 关闭窗口; // 只是对话框,不是报告
)
)
)
)
);
处理平台代码修改的首选方法是在平台初始处理后将消息传递到平台。尝试修改平台声明变得太混乱且太不稳定。
下面是修改后的脚本,以在图形生成器平台运行后添加过滤器。然后隐藏本地数据过滤器的实际显示

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value// Check box to Remove group A from the graph
usw = New Window( "Ignore A?",
<<MODAL></MODAL>