式形式の JSL について混乱している<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />小さなテーブルを別のテーブルに保存して、同じレポート内で両方を使用するスクリプトが呼び出されたときにいつでも小さなテーブルを再構築できるようにしたいと考えています。これは、テーブルのユーザーが 1 つのデータテーブルのみを保存しながら、その小さな関連する情報テーブルを簡単に開くことができるため、優れたソリューションのように思えます。
expr() 構文の層を何度も歯ぎしりした結果、次のものが機能するようになりました。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open("$SAMPLE_DATA/摩耗.jmp");
ts=dt<< スクリプトを取得();
閉じる(dt,nosave);
ne=nameexpr(ts);
eval(substitute(expr(dt2<
//...後で...
dt2<
dtBigClass=現在のデータテーブル();
でも、質問が2つ…
1) 本当にこんなに複雑ですか?getscript() を使用してスクリプトを取得したのですが、取得したスクリプトをテーブルに「入れる」もっと簡単な方法はありませんか?
2) スクリプトの実行後に currentdatatable() を使用して変数 dtBigClass がテーブルを指すようにすることには興味がありません。おそらく間違ったものを入れてしまう傾向があるようです。 スクリプトが失敗したり、タイミングの問題が発生したりしても、まだ何らかのテーブルを dtBigClass に割り当てようとしています。スクリプトは "New Table("Big Class..なんとか、なんとか" のように見えますが、実際には " dtBigClass=NewTable("Big Class...なんとか..." を実行したいと思います)スクリプトを編集して実行できるテキスト文字列の形式に「取得」できるソリューションがあれば非常に満足です率直に。
Re: 式形式の JSL について混乱していますありがとう!
これら両方の回答に感謝します。eval expr() ベースのものを理解するためにおそらくもっと努力する必要がありますが、私は認めなければなりませんy の主なメソッドは、テキスト文字列を eval(parse()) することです。頭を悩ませることが少なくなり、文字列部分を実行して、構築しているものを直接調べることができます。しかし、それを文字列に入れる方法がわかりませんでした...
char(dt<
ts=dt<
そしてchar(ts)...
...それはうまくいきません。
同様に、2 に対するあなたの答えは非常に単純に思えますが、それが機能するとは思いつきませんでした。私はまだ少し驚いています - dtBigClass に入れる何かを返すのかは私には明らかではありませんが、それは素晴らしいことです。
Re: 式形式の JSL について混乱しています式の操作はイライラすることがあります。 関数の引数が実行時に評価されるのか、それとも記述どおりに受け入れられるのかを知るのは必ずしも簡単ではありません。 通常、式を列式やテーブル スクリプトなどの GUI 要素に転送する場合、引数が評価されないため、余分な労力がかかります。 場合によっては、expr() や evalexpr() などの最適な使用方法を見つけるよりも、文字列を構築してから eval(parse()) を実行する方が簡単な場合があります。
1) ある程度簡略化できます。 この例では、それを行う 2 つの方法を示しています
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
dt2 =開ける( "$SAMPLE_DATA/摩耗.jmp" ) ;
//1. 表現
評価(評価式( dt2 <<新しいスクリプト( 「ビッグクラス」 、 dtBigClass =エクスプレッション( dt <<スクリプトを取得)))) ;
//2. 弦
評価(解析する( "dt2 << newscript(\!"BigClass2\!", dtBigClass2 =" ||シャア( dt <<取得スクリプト) || ")" )) ;
近い( dt 、保存しない) ;
dt2 <<実行スクリプト( 「ビッグクラス」 ) ;
dt2 <<実行スクリプト( 「ビッグクラス2」 ) ;
2) 上記のように、または以下のようにスクリプト内で割り当てを行うことができます。
dtBigClass = dt2 <<実行スクリプト( 「ビッグクラス」 ) ;
Re: 式形式の JSL について混乱しています1: ほぼそれくらい複雑です。NewScript は引数がスクリプトであることを期待しており、多くの場合これが正しい答えです。 今回ではない。
2: この仕事でも CurrentDatatable は好きではありません。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Abrasion.jmp" );
Eval( Eval Expr( dt2 << NewScript( "BigClass", bigclass = Expr( dt << getscript ) ) ) );
replace は 1 つの方法ですが、EvalExpr を使用して Expr のみを評価することもできます。EvalExpr の結果は次の式になります。

まだ評価する必要があります。EvalExpr は Expr を検索して評価し、置換を行った元の式を返します。3 行目に戻ると、実際に NewScript コマンドを実行するためにもう 1 回 Eval が行われています (ただし、への割り当ては行われていません)。ビッグクラス)。
「BigClass」という名前のスクリプトが実行されると、変数が割り当てられます。ビッグクラス、CurrentDatatable の必要性を回避します。