使用 JSL 堆疊多個帶條件的參數我得到了一個具有多個參數的資料集,其格式為“TestNumber;TestName”。 我知道我們可以輕鬆地手動進行操作。 但
我想用 JSL 以一種聰明的方式將它們全部堆疊起來。 如何在 JSL 中執行此操作? 請指教。 謝謝
回覆:使用 JSL 堆疊多個帶條件的參數嗨,舞會,
感謝您的精彩提示! 它像冠軍一樣工作!回覆:使用 JSL 堆疊多個帶條件的參數您需要將列名稱轉換為字串。另外 one_col 也不是列表。這是更正後的代碼。我鼓勵你
a) 閱讀腳本手冊
b) 經常檢查日誌中的變數值、錯誤訊息等。
c) 繼續使用此論壇
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous, string );
stackcols = {};
//one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
show(one_col, i);
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );回覆:使用 JSL 堆疊多個帶條件的參數謝謝pmroz。 我根據你的建議修改了腳本,但似乎遇到了錯誤。
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous );
stackcols = {};
one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );
/****************************************
存取或評估 'Regex' 時出現模式比對未知錯誤,Regex/*###*/(one_col, "(\d+);(\S+)")
回覆:使用 JSL 堆疊多個帶條件的參數col_list = {"2010;PinShort@CLK", "2011;PinShort@IO", "2012;PinShort@VDD", "Label", "Data"};
stackcols = {};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
if (regex(one_col, "(\d+);(\S+)") == one_col,
insertinto(stackcols, one_col);
);
);
回覆:使用 JSL 堆疊多個帶條件的參數嗨,納爾遜,
我完全理解。 然而我的問題正是您上面提到的,“如何使用我的條件填充 stackCols 列表”,並使用正則表達式“(\d+);(\S+)”作為參數。
不管怎麼說,還是要謝謝你。 我會嘗試自己嘗試並犯錯。回覆:使用 JSL 堆疊多個帶條件的參數@OneNorthJMP ,
我相信伊恩向您展示的正是您所要求的。Ian 展示的是您需要做的就是在 JSL 中建立一個清單 (stackCols),其中包含您想要堆疊的列的名稱,然後執行腳本底部的程式碼片段:
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
因此,問題是您如何填充 stackCols 清單。如何做到這一點取決於您的需求。它可能就像使用一樣簡單
stackCols = dt << get column names( continuous );
填充列表。或者可能需要更複雜的方法。但 Ian 展示的是,使用資料表中目前擁有的任何資料來執行 Stack Platform 是多麼簡單。
回覆:使用 JSL 堆疊多個帶條件的參數嗨伊恩,
感謝您的回覆。 也許我的解釋不太清楚。 我想讓 JSL 腳本能夠適應不同輸入表中的不同參數。
例如,輸入表1,我有2列。 我必須將 JSL 修改為以下內容。
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
例如,輸入表 2,如果我有 3 列。 我必須將 JSL 修改為以下內容。
Data Table( "FINAL.jmp" ) << Stack(
columns( :Name( "2010;PinShort@CLK" ), :Name( "2011;PinShort@IO" ), :Name( "2012;PinShort@VDD" ), ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
那麼,如果我有一千列怎麼辦? 那我必須一一手動輸入嗎?或手動執行此操作? 是的,我當然可以手動完成。 但這不是我的目標,我希望有一個腳本可以讀取正規表示式來查找堆疊參數“(\d+);(\S+)”,無論我的輸入表是什麼。
回覆:使用 JSL 堆疊多個帶條件的參數詳細資訊將取決於您所說的「我的表是動態的」時的確切含義以及您需要多少智慧。
但是,例如,對 JMP 產生的程式碼進行一些小的更改,您可以:
NamesDefaultToHere(1);
sourceTable = DataTable("FINAL");
stackCols =
{
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
};
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
“sourceTable”和“stackCols”的值將由使用者介面或某些較大的 JSL 腳本設定。
回覆:使用 JSL 堆疊多個帶條件的參數嗨伊恩,
我已經知道了。 事情是我的桌子是動態的。 我不想每次有不同的資料表時都修改我的腳本。 但我的參數資料格式是固定的。 因此,在 JSL 中編寫此程式碼應該是一種明智的方法。回覆:使用 JSL 堆疊多個帶條件的參數如果可以的話,讓 JMP 為您完成工作是個好主意 - 通常您只需「手動」執行一次操作,然後使用 JMP 自動生成的程式碼。
在這種情況下,如果您執行“表>堆疊”:

點擊「確定」會產生一個新表,其中包含名為「來源」的已儲存腳本。 如果右鍵單擊關聯的綠色“運行”圖標,則可以選擇“編輯”,這將為您提供以下腳本:
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
您可以使該腳本變得更智能,但如果您只是添加新行,它將正常工作(只要它需要的列仍在來源表中)。