特殊文字を含む行と列の比較これは非常に簡単かもしれませんが、私は JMP を初めて使用するため、このエラーの解決策を見つけるのが難しいと感じています。
予期しない「%」です。 おそらく「,」または「)」が欠落している可能性があります。
スコープ付きデータ テーブル アクセスには、 dt1: Acidic Variant' 、 dt1:Acidic Variant /*###*/ へのアクセスまたは評価にデータ テーブル列または変数が必要です。
あるテーブルの行と他のテーブルの列を比較しているだけです。 % や () などの特殊文字を含まない行名や列名には機能しますが、名前に特殊文字が含まれる場合があります。 誰かがこれをどのように処理できるかを私に指摘できますか? ご協力をよろしくお願いいたします。 ありがとう
Re: 特殊文字を含む行と列の比較私のループは最後の値を受け取らなかったため、正しくなかったと思いました。 更新が遅れて申し訳ありません。
Re: 特殊文字を含む行と列の比較@txnelson example2 の最後の行の仕様制限を考慮していないだけであることに気付きました。 理由はまだわかりませんが、判明したら更新します。
ありがとう。
Re: 特殊文字を含む行と列の比較@txnelsonすぐにご対応いただきありがとうございます。
Re: 特殊文字を含む行と列の比較次に、列名と制限データテーブルの名前に違いがあるのではないかと思います。
Re: 特殊文字を含む行と列の比較@txnelson , しかし、変更されたテーブルに対してスクリプトを実行すると、仕様制限が「Acidic Variants」列に入力されません。Re: 特殊文字を含む行と列の比較スクリプトは制限テーブルを行ごとに読み取ります。次に、現在存在する行から列名を取得し、列番号ではなく列名によってデータ テーブルの列に制限を適用します。
したがって、データテーブル内の列の順序は重要ではありません。
Re: 特殊文字を含む行と列の比較@txnelson , 行が列と同じ順序ではない場合、データテーブルに仕様制限を追加することはできますか? 例えば、
テーブル Example1 はそのままですが、テーブル Example2 は次のようになります。

どうすればこれを達成できますか? ご意見ありがとうございます。
Re: 特殊文字を含む行と列の比較説明ありがとうございます。
Re: 特殊文字を含む行と列の比較この問題は、JSL を作成するときによくある問題です。列名に特殊文字が含まれています。たとえば、列名は次のようになります。
A+B
そしてあなたが行おうとしているのは、列プロパティを設定することです...この場合は仕様制限です。したがって、コマンドを直接書き出すと、次のようになります。
:A+B << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
JSL はこれを好みません。これは、変数名「B」の値を追加し、それに Set プロパティを適用する「A」という名前の列として解釈されるからです。JSL はエラーをスローするだけです。
したがって、解決策は :Name() 関数を使用することです。
:Name("A+B") << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
これにより、JSL は A+B を列名として解釈します。これをさらに正確にするために、この先頭にデータ テーブルへのポインタを追加すると、特定の列を指すだけでなく、特定のデータ テーブル内の特定の列も指すようになります。
dt1 = data table("..........");
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
ここで具体的な質問に移ります。
( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" )
もっと完全な形で検討する必要がある
Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ) )
私たちは常に JSL を内側から外側まで検討する必要があります。したがって、次のようにしましょう
i = 2;
また、ColumnName という名前の変数のデータ テーブル dt2 の 2 行目の値は A+B であるとします。
Column( dt2, "ColumnName" )[i] = "A+B"
これで、JSL コードは次のように解決されました。
Parse( "dt1:Name(\!"" || "A+B" || "\!")" ) )
次の操作は、3 つの文字列を 1 つの文字列に単純に連結することです。
"dt1:名前(\!""
「A+B」
「\!」)」
文字列 1 と文字列 3 に二重引用符が多すぎるように見えるかもしれません。しかし、JSL では \!はエスケープ文字で、これに続く文字が別の方法で処理されることを示します。\!n は改行文字として扱われ、この例では \!" は埋め込まれた二重引用符として扱われます。
したがって、連結が完了すると、JSL は次のようになります。
Parse( "dt1:Name(\!"A+B\!")" ) )
最後のステップは、Parse() 関数の結果として得られるアクションです。文字列が解析され、実行の準備が整います。この場合、それは単に外側の二重引用符を削除し、\!" を単純な二重引用符に解決して、それを残すことを意味します。
dt1:Name("A+B")
これは、名前に特殊文字が含まれる列を参照するための構文として必要な正確な形式です。
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
これがお役に立てば幸いです
Re: 特殊文字を含む行と列の比較@txnelsonこれは本当に魔法のようにうまくいきました。 ただし、この部分が何をするのか理解してもらえますか? name関数を使用してみましたが、機能しませんでした。 改めて、ご協力いただき誠にありがとうございました。
<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"dt1:Name(\!"</SPAN><SPAN class="token string">" || Column( dt2, "</SPAN><SPAN class="token function">ColumnName</SPAN><SPAN class="token string">" )[i] || "</SPAN>\<SPAN class="token operator">!</SPAN><SPAN class="token string">")"</SPAN> <SPAN class="token punctuation">)</SPAN>
Re: 特殊文字を含む行と列の比較ここでは、スクリプトが機能するようにスクリプトを変更します。正しいパスをたどっています。Substitute 関数で :Name() 関数を使用する必要があるだけです。
Names Default to Here(1);
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
colNamesList = dt1 << get column names( string );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
If( Try( __col__ << get name, "" ) != "",
__col__ << Set Property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )}
)
)
),
Expr( __col__ ), Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
また、ターゲット データ テーブルで列が見つかったことを確認するチェックを追加しました。これにより、スクリプトがエラーを出さず、すべてのレコードが処理される前に処理が停止します。
Re: 特殊文字を含む行と列の比較@aam_jmp 、
おそらくこれはあなたが何かを学ぶことができる役立つ投稿ですhttps://community.jmp.com/t5/Discussions/Spec-limits-issue/mp/50166。
スレッドを読んで、実際の質問が何だったのか理解しようとしています。 あなたの目標が何であるかを定義しておくと、おそらく役立つでしょう。そうすれば、スレッドは答えやすくなり、コミュニティ全体にとって有益になります。
Re: 特殊文字を含む行と列の比較ウデイ、助けてくれてありがとう。 私はこの部分を自分自身に教えています。 ただし、別のデータ テーブルを使用してデータ テーブルに仕様制限を設定しようとしていました。 列の名前に特殊文字が含まれていない場合、これをスムーズに行うことができます。 ただし、データテーブル内の特殊文字を処理できません。 私が試したアプローチの 1 つは、列名から (%) を見つけてスペースに置き換えることでした。 たとえそれがうまくいったとしても、それが私の問題に対する最善の解決策であるとは思えません。 アドインを使用して仕様制限を追加できることはわかっていますが、JSL でこの問題を解決する方法を知りたいと思います。 これに関してご意見がございましたら、よろしくお願いいたします。 私のコードは次のとおりです:
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
__col__ << Set Property( "Spec Limits", {LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )} );
),
Expr( __col__ ), Parse( "dt1:" || dt2:ColumnName[i] ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Re: 特殊文字を含む行と列の比較@aam_jmp 、
Help => Scripting Index ==> Parse にある Parse() のドキュメントを見ると、
定義によると、Parse は文字列を期待していますが、実装では 2 つの引数を渡し、それらが連結されることを期待しています。 これが、列の正しい名前を指定した場合でも機能しない理由を理解できた理由です。 Scripting Index はあなたの友人であり、構文や関数の定義を自分で理解するためにどんどん使用してください。
Re: 特殊文字を含む行と列の比較列の正しい名前を指定した後でも、Parse を使用すると必要な出力が得られないのはなぜですか? % や () などの特殊文字を解析する方法はありますか? @uday_guntupalli
Re: 特殊文字を含む行と列の比較@aam_jmp
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
ColValuesEx2 = dt2:Column 1 << Get Values;
a = n rows(dt2);
Res= {};
For(i=1,i<=a,i++,
temp = Concat("dt1:",ColValuesEx2[i]);
Insert Into(Res,temp);
);
Show(Res);
これを試して。 以前に行っていたことに関する問題は、ColName が実際の列を参照していないということでした。 データ テーブル 2 にスコープを設定しようとする場合は、データ テーブルに存在する列を参照する必要があります。
Parse の代わりに concatenate を使用したところ、希望の結果が得られました。

Re: 特殊文字を含む行と列の比較@uday_guntupalliテーブルを提供することはできませんが、達成したいことの 1 つは、列名を解析できるようにすることです。 似たようなデータテーブルを作成しました。 このデータに対して以下のコードを機能させたいと考えています。
Names Default To Here( 1 );
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
dt4 = dt2:Column 1 << get values();
a = n rows(dt2);
For(i=1,i<=a,i++,
Parse("dt1:" || dt4[i]);
);
Re: 特殊文字を含む行と列の比較@aam_jmp 、
私の回答をもう一度読んで、次のサンプルを使用してみてください。 Name 関数は、あなたが抱えている問題を解決することができます。 同様のサンプルを掲載しております。 スクリプトとサンプル データを共有しない限り、エラーの原因を特定するのは困難です。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // Open Sample Data
MeanWeight = Col Sum(dt:weight); // Calculate Column Mean
dt << New Column("% of Total Weight",Numeric,Format("Percent",10,2),Continuous,Formula(:weight/MeanWeight)); // Define New column with % in name
dt << New Column("Test",Numeric,Format("Percent",10,2),Formula(Col Cumulative Sum(:Name("% of Total Weight")))); // Define Test Column that demonstrates the use of Name function that can capture the column name with % in it これで私の提案がもう少しわかりやすくなることを願っています。そうでない場合でも、もう少し詳しく教えていただけると助かります。
Re: 特殊文字を含む行と列の比較名前は次のようになります: Titer (%) 1、Titer(%) 2 などRe: 特殊文字を含む行と列の比較@aam_jmp 、
列名が「%x」である場合のように、% 記号が列名の一部である場合は、Name() 関数を使用して列を識別してみてください。 サンプル データ セットとスクリプトを提供していただければ、それを調べて何が問題なのかを確認できます。