在運行時創建變量你好,
有沒有辦法在運行時創建變量(在運行應用程序之前我不知道我需要多少變量及其類型)?
我正在處理的解決方案:
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 ) );