JSLで条件付き複数パラメータをスタックする特定の形式「TestNumber;TestName」を持つ複数のパラメーターを含むデータセットを取得しました。 手動で簡単にできることはわかっています。 しかし
それらをすべて JSL でスマートに積み重ねたいと考えています。 JSL でこれを行うにはどうすればよいですか? お知らせ下さい。 ありがとう
Re: JSLで複数のパラメータを条件付きでスタックするこんにちは、プロムズさん
素晴らしいヒントをありがとう! それはチャンピオンのように機能します!Re: 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" );Re: 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+)") のアクセスまたは評価におけるパターン一致での不明なエラー
Re: 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);
);
);
Re: JSLで複数のパラメータを条件付きでスタックするこんにちは、ネルソンさん
十分理解しています。 それでも、私の問題はまさにあなたが上で述べたもの、正規表現「(\d+);(\S+)」を使用したパラメトリック条件で「stackCols リストにデータを設定する方法」です。
とにかくありがとう。 自分なりに試行錯誤してみます。Re: JSLで複数のパラメータを条件付きでスタックする@one_north_jp 、
イアンがあなたに示したことは、あなたが求めているものだと信じています。Ian が示したのは、スタックする列の名前を含むリスト (stackCols) を JSL 内に作成し、スクリプトの最後にあるコードを実行することです。
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 を実行することがいかに簡単であるかということです。
Re: 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" )
)
たとえば、列が 3 つある場合は、テーブル 2 と入力します。 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" )
)
では、列が 1000 個ある場合はどうなるでしょうか? それでは、これを一つずつ手動で入力する必要がありますか?それとも手動で行いますか? はい、もちろん手動でもできます。 しかし、それは私の目的ではありません。入力テーブルが何であっても、正規表現を読み取ってスタックパラメータ「(\d+);(\S+)」を見つけることができるスクリプトが必要です。
Re: 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 スクリプトによって設定されます。
Re: JSLで複数のパラメータを条件付きでスタックするこんにちは、イアンさん
これはもう知っています。 私のテーブルは動的です。 異なるデータテーブルを使用するたびにスクリプトを変更したくありません。 しかし、私のパラメトリックデータ形式は修正されています。 したがって、これを JSL でコーディングするのは賢明な方法であるはずです。Re: JSLで複数のパラメータを条件付きでスタックする可能であれば、JMP に作業を行わせることをお勧めします。通常は「手動」で一度だけ行う必要があり、その後は JMP が自動的に生成するコードを使用します。
あなたの場合、「テーブル > スタック」を実行すると、次のようになります。

「OK」を押すと、「Source」という名前の保存されたスクリプトを含む新しいテーブルが作成されます。 関連する緑色の「実行」アイコンを右クリックすると、「編集」を選択でき、次のスクリプトが表示されます。
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" )
)
このスクリプトはさらにスマートにすることができますが、新しい行を追加するだけの場合は (必要な列がソース テーブル内にある限り) 正常に機能します。