連結された文字列を関数の引数として使用できますか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />次の簡単な例を考えてみましょう。
dt2 = 現在のデータテーブル();
b = 140;
bc = char(b);
印刷(b);
印刷(bc);
dt2 << 新しい列("範囲"||bc||"v1",
数値、
式(b)
);
// dt2 = 現在のデータテーブル();
dt2 << 新しい列("範囲",
数値、
Formula(最大(:Name("AA"||bc), :Name("BB"||bc), :Name("CC"||bc)) - 最小(:Name("AA"||bc) , :Name("BB"||bc), :Name("CC"||bc)))
);
これが表です:

返されたエラー メッセージ:

私はJSLプログラミングをほとんどやっていないので、助けてください!!これがうまくいくといいですね。
Re: 連結文字列を関数の引数として使用できますか?おっと、それはごめんなさい! 深夜の JSL コーディングCraige がその問題の原因となっている括弧のエラーを発見し、物事を簡素化したようです (ありがとう)クレイジ!)。
ジュリアン
Re: 連結文字列を関数の引数として使用できますか?こんにちは、クレイジさん
それを試してみます。スクリプト内で Name() を使用することになった理由は、別の数式のために数式エディターから直接コピーしたためだと思います。さて、括弧の問題が分かったと思います。
ありがとう!
Re: 連結文字列を関数の引数として使用できますか?こんにちは、ジュリアンさん
あなたのスクリプトを試してみましたが、部分的には機能しているようです。実行すると、次のようになりました。

[範囲] 列の下の値は 15 ではなく 5 にする必要があります。
そしてログには次のように書かれていました(私には理解できません):

最大値が適切に評価され、そこで停止するようです。何か案は?ご協力いただきありがとうございます
脚本:
dt2 = 現在のデータテーブル();
b = 140;
bc = char(b);
印刷(b);
印刷(bc);
dt2 << 新しい列("バイアス"||bc||"v1",
数値、
式(b)
);
// dt2 = 現在のデータテーブル();
dt2 << 新しい列("範囲",
数値、
);
eval(parse(EvalInsert(
「\[
:Range << Set Formula( Maximum(:Name("^"AA_"||bc^"), :Name("^"BB_"||bc^"), :Name("^"CC_"||bc )^") -
Minimum(:Name("^"AA_"||bc^"), :Name("^"BB_"||bc^"), :Name("^"CC_"||bc^"))
)
]\")));
Re: 連結文字列を関数の引数として使用できますか?Julian の返信をフォローアップするためのもう少し詳しい情報。
はい、連結を使用して、ほとんどの関数の引数を構築できます。名前は本当に奇妙な例外の 1 つです。 Name() は解析時ヘルパーであり、実行時関数ではありません。
ほとんどの JSL 変数名は整形式であり、文字、数字、アンダースコア、スペースのシーケンスであり、JMP のパーサーで容易に理解できます。あなたの名前、 AA_140 、などがよく形成されています。場合によっては、変数名が複雑になることがあります。通常、これはカンマまたはマイナス記号が埋め込まれている場合に発生します。 X線またはリンゴ、ナシ。これらの変数名を引用符で囲まずに JSL 式を記述することはできません。 Name() ラッパーはまさにそれを行います。
名前("X線") + 名前("リンゴ、梨")
2 つの変数を加算します。name は、JSL ソース コードが実行されるときではなく、解析されるときに処理されます (実行されません)。Name への引数は、解析時には単純な文字列である必要があります。Julian のコードは、JMP の文字関数を使用して、連結された文字列を事前に構築し、それを解析関数に送信します。
変数名は適切に形成されているため (常に良いアイデアです)、名前ラッパーは必要なく、Julian のアイデアはさらに簡素化できます。(これにより、括弧の位置が間違っていたのも修正されます。)
eval(parse(EvalInsert(
「\[
:範囲 << 式を設定(
最大(^":AA_" || bc^, ^":BB_" || bc^, ^":CC_" || bc^) -
最小値(^":AA_" || bc^, ^":BB_" || bc^, ^":CC_" || bc^) )
]\")));

文字列の構築や解析を行わずに数式を直接操作するための JSL 関数は他にもありますが、Julian の EvalInsert アイデアにより、JSL で使いやすい文字操作を使用できるようになります。
Re: 連結文字列を関数の引数として使用できますか?こんにちはシェザード・カカ、
eval、parse、および eval insert を使用して式を構築することで、これを機能させることができました。 JSL は初めてだとおっしゃっていたので、これはかなり不可解に見えると思いますが、この中の 2 つの重要な部分について説明させてください。
最初に行ったのは、列の作成とは別に、数式を独自の部分に設定することでした。 これは、列の式を設定するための式の構築に集中できるようにするためです。 この大部分は Eval(Parse(EvalInsert( ))); です。やってる。EvalInsert は、文字列を取得して変数または変数の関数に置き換える優れたツールです。 置換が必要であることを指定するには、関数または変数を ^ ^ で囲みます。 例えば:
g = "世界";
h = EvalInsert("こんにちは ^g^ ");
キャプション(h);
この場合の h は「hello world」と等しくなります。これは、上記のコードのキャプション ボックスに表示されるものです。
あなたの状況では、列名に evalInsert を使用しました。
:名前("^"AA_"||bc^")
これを分解してみると、より明確になります
:名前(" ^ "AA_" || bc ^ ")
:Name() 関数ではテキストを引用符で囲む必要があるため、最初と最後に括弧で囲んで引用符を付けます。 次に、連結を ^ ^ で囲みます。 Evalinsert はそれを処理し、:Name() 関数には AA_140 という引用符で囲まれた文字列が残ります。 EvalInsert は、^ ^ で囲まれた箇所を置換します。 特別に複雑な点が 1 つあります。それは、構築している式には引用符を含める必要がありますが、文字列自体を指定するには引用符を使用する必要があることです。 これを処理するには、各引用符の前に \! を付けることで、各引用符が (JMP 構文の一部ではなく) 実際に引用文字であることを JMP に伝えることができます。 (スラッシュバン) または、以下で行ったのと同じように、開始引用符の後に \[ を、最後の引用符の前に ]\ を置きます。 これにより、作成中の式内のすべての引用符が「エスケープ」されます。
次に、Parse() によって文字列が JSL 式に変換され、最後に Eval() によって JSL 式が実行され、式が列に割り当てられます。
これがお役に立てば幸いです!
ジュリアン
ps: コードには列名のアンダースコアがなかったので、追加しました。
dt2 =現在のデータテーブル() ;
b = 140 ;
紀元前=文字( b ) ;
印刷する( b ) ;
印刷する(紀元前) ;
dt2 <<新しい列( "範囲" ||紀元前|| 「v1」 、
数値、
式( b )
) ;
// dt2 = 現在のデータテーブル();
dt2 <<新しい列( "範囲" 、
数値、
) ;
評価(解析する(評価挿入(
「\[
:Range << Set Formula( Maximum(:Name("^"AA_"||bc^"), :Name("^"BB_"||bc^"), :Name("^"CC_"||bc )^") - Minimum(:Name("^"AA_"||bc^"), :Name("^"BB_"||bc^"), :Name("^"CC_"||bc^" ))
)
]\" ))) ;