Forループを使用して列スクリプトを取得する手作業で入力した式に基づいた新しい列がたくさんあるデータテーブルがあります。私は私が別のテーブルにすべてのこれらの列を再作成することを可能にするJSLスクリプトを作成したいです。
次のスクリプトは、単一の列に必要なものを返します。
dt=current data table();
column(dt,1) << Get script;
FORループを使って自動化したいのですが、うまくいかないのです。これを修正する方法についての提案は大歓迎です!
これが私が試したものです:
dt=current data table();
j= N cols(dt);
For( i = 1, i <=j , i++,
Column(dt,i) << Get Script;
);
再:Forループを使用して列スクリプトを取得するこんにちは @ cjohnson6 、
の選択した列アドインのコピースクリプト式列を選択してアドインを実行すると、選択したすべての列の複合スクリプトがクリップボードにコピーされるので、それをJSLワークフローに貼り付けることができます。
@julian
再:Forループを使用して列スクリプトを取得する参考までに、アドインスクリプトの重要な部分は次のとおりです。
//collist is a list of the formula columns to be copied
For( i = 1, i <= N Items( collist ), i++,
//create a new column in the copy to data table
//substitute replaces the form in the New Column() expression with the formula from
//the source column
Eval(
Substitute(
Expr(
dt2 <<
New Column(
Column(
chosen,
Char( collist[i] )
) << get name,
formula( form )
)
),
Expr( form ),
Column( chosen, Char( collist[i] ) )
<< get formula
)
)
);
再:Forループを使用して列スクリプトを取得するアップロードしたばかりです数式のコピーアドインにファイル交換 。
それはあなたにアドインメニューからこれをするインタラクティブな方法をあなたに与えるでしょう。

あなた自身のスクリプトを書く必要はありません。
再:Forループを使用して列スクリプトを取得するデータテーブル全体のスクリプトを一度に取得できます。
dt = Current Data Table();
myScript = dt << get script;
欠点は、スクリプトに埋め込まれているすべてのデータが取り込まれることです。 簡単な方法は、まずデータを削除してからスクリプトを取得することです。
dt = Current Data Table();
dt << select all rows << delete rows;
myScript = dt << get script;
それからそれは取り出されたスクリプトを編集することの簡単な問題になります。
スクリプトに関しては、<< getスクリプトの結果をログに表示することを前提としているので、そこから切り取って貼り付けることができます。 スクリプトを実行すると、JMPは通常、最後のステートメントの最後の結果を表示します。 したがって、1列<< get scriptを実行すると、結果が表示されます。 ループで実行したい場合は、Write、Print、またはShow関数を使用して結果を強制的にログに記録する必要があります。
dt = Current Data Table();
j = N Cols( dt );
For( i = 1, i <= j, i++,
Show( Column( dt, i ) << Get Script )
);
あるいは、プログラム的に作業できる構造に値を保持したい場合は、結果をリストに入れることができます。
dt = Current Data Table();
myList = {};
j = N Cols( dt );
For( i = 1, i <= j, i++,
myList[i] = Column( dt, i ) << Get Script
);