在运行时创建变量你好,
有没有办法在运行时创建变量(在运行应用程序之前我不知道我需要多少变量及其类型)?
我正在处理的解决方案:
1.用户将选择一些jmp / excel数据表
2.用户将选择用于过滤表的列(未知数量和名称)
3.该应用程序将为每个选择的列创建列表框或单选框,并用该列的不同值填充它
4.用户选择过滤值后,应用程序将运行过滤并返回过滤后的表格
因此,如果可能的话,我需要在运行时为每个列表框创建具有有意义名称的变量。
谢谢,
汤姆。
Re:在运行时创建变量JSL绝对允许您创建自己的数据过滤器版本,并且您将能够以您认为最适合您环境的任何形式呈现它。 我会告诉你,你需要构建的所有异常处理都会使任务变得非常复杂。 下面是一个非常粗略的脚本,它将为您提供一个在用户可以选择表和要处理的表中的列的环境中创建变量的示例。 我选择使用名为“Big Class”的示例数据表,但任何表都可以使用代码。创建的列表名为“nameList”,“handleList”和CNTList保存选定的列,并指向生成的列表框,最后一个是允许在选择选择时退出所有信息的编号在其中一个生成的列表框中。 现在,我将清楚地承认,这只是可用于创建所需显示的可能方向之一。 我还要重申一下,很多异常代码,处理诸如删除要过滤的选定列,如何处理数字过滤器之类的事情,在它们的比较中选择为“And”或“Or”.... ......所有需要处理的项目。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
Current Data Table( dt );
CNT = 0;
// Create lists to handle processing
nameList = {};
handleList = {};
CNTList = {};
// Create the new window
nw = New Window( "Example",
V List Box(
Text Box( "Data Table Columns" ),
Spacer Box( size( 0, 10 ) ),
clb = Col List Box(
dt << get name,
all,
max selected( 1 ),
Sel = clb << get selected;
If( N Items( Sel ) > 0,
CNT++;
Insert Into( nameList, Sel[1] );
Eval( Parse( "summarize(dt,bygp=by(:" || Char( Sel[1] ) || "))" ) );
lb = List Box( bygp, Eval( Parse( "SelectionChoice=" || Char( CNT ) || ";" ) ) );
Insert Into( handleList, lb );
Insert Into( CNTList, CNT );
HLB << append( lb );
);
),
HLB = H List Box()
)
);Re:在运行时创建变量谢谢吉姆。
我想用Listboxes和Radioboxes开发我自己的GUI - 不使用Data Filter选项。
用户将能够控制用于过滤的列 - 我将让他管理“用户属性”jsl中的列名称。
例如,desiredColumnsList = {“ColumnA”,“ColumnD”} - 将由用户修改。
然后,对于他选择的每一列,我将创建用于过滤的列表框。
对此有何建议?
再次感谢。
汤姆。
Re:在运行时创建变量您可以使用内置的“数据过滤器”来执行您想要的操作,而无需编写任何代码。 只需打开所需的数据表,然后转到下拉菜单
行==>数据过滤器
然后可以选择任何或所有列进行过滤。
最后,当选择过滤器并选择它们的值时,可以通过转到红色三角形并选择“显示子集”来创建新的子集化数据表。
此操作也可以使用以下代码编写脚本:
Names Default To Here( 1 );
// Open the desired file
path=pick file();
dt=open(path);
// Get all of the columns in the data table
colList = dt << get column names();
// Build the code required to open a Data Filter
// That has all columns available for filtering
TheExpr =
"dt << Data Filter(
Location( {59, 59} ),
Auto clear( 0 ),
Mode( Show( 1 ), Include( 1 ) ),
Add Filter( columns(";
TheExpr = TheExpr || ":" || colList[1];
For( i = 2, i <= N Items( colList ), i++,
TheExpr = TheExpr || ", :" || colList[i]
);
TheExpr = TheExpr || ") ) );";
// Execute the code that was built
Eval( Parse( TheExpr ) );