Column() 対 As Column() 対 dataable:column 対 dt:As name("column")JSL には、列を参照する方法がいくつかあります。 まず、データ テーブルを開きます。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
次に、このようなテーブル スクリプトを作成します。
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
自動化されたスクリプト (グラフなど) では、ユーザーが列の名前を変更すると、スクリプトが新しい列名に適応するように見えます。 これはカスタム JSL では失敗し、Index() のようなものが表示されました。
これらすべてのメソッドを使用して、列名の変更に対して堅牢な JSL スクリプトを作成するにはどうすればよいでしょうか?
よろしく、
スクリプティングRe: Column() vs As Column() vs dataable:column vs dt:As name("column")実際に驚くべきことダッシュボード列の名前を変更した後も機能します
- テーブルスクリプトとして保存されている場合;)
このような優れた自動修正アルゴリズムを実装していただきありがとうございます。
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")ここに願いがあります:)
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idi-p/556596
同様の機能が Jmp 17 の新しいワークフロー ビルダーで導入されたため、JSL エディターで簡単に実装できるはずです。
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")column() と as column() の違いに関する素敵なビデオ チュートリアル:
最も一般的な JSL の間違いとその回避方法 (2020-US-30MP-571)
(開始 @ 5:18 分)
例で
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
について
これらすべてのメソッドを使用して、列名の変更に対して堅牢な JSL スクリプトを作成するにはどうすればよいでしょうか?
コードを自動修正するオプションを使用して、列名の変更後に行方不明の列イベントをキャッチするエラー処理機能はどうですか。
アイデア:
列が欠落している場合、JMP はエラー メッセージを表示する代わりにウィンドウを開いて列リストを表示し、正しい列を選択することができます。
その後、コードの実行は継続され、ソース コードは自動的に修正されます。
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")最良の参照 (私自身の経験と試行錯誤の範囲外) は、スクリプト インデックスからのものです。


ヘルプページは別の場所Column(- , "名前", "フォーマット済み")と
列 (名前) として. こちらにも情報がありますスクリプトガイド > JSLビルディングブロック > 名前解決の規則 > 名前解決に関するよくある質問とスクリプト ガイド > データ テーブル > 列 > データ列オブジェクトへのメッセージの送信またテーブル内の行を反復する、つまり基本的にはドキュメント (特にスクリプト ガイド) です。
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")このビットを説明するリファレンスを回答に含めていただけますか?
"As Column() は列に「アクセス」します (これが何を意味するかは場合によって異なります... )」
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")+1 投稿はあまり好きではありませんが、 @jthiこれは、私がプロダクション スクリプトに対して行っているのとまったく同じ方法です。私は通常、次のように考えます
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")これは少し長い投稿で、あちこちジャンプします。申し訳ありません..
Column()、Column()、:colname、... は JSL では単純ではなく、どちらを使用するかはケースによって異なります。 私の好ましい方法は、いつもを使用します(できない場合、またはスクリプトを少しきれいにしたい場合を除く)Column(datatable_reference、「列の名前の文字列」)。 :colname には、スクリプターの利益のために時々使用できる利点があります (いくつかはここで言及されていますスクリプトガイド > JSLビルディングブロック > 名前解決の規則 > 名前解決の規則例外セクションで)。
また、あちこちで発生する可能性のある問題を回避するために、:colname 構文の代わりに列名の文字列を使用することも好みます。 たとえば、 << Get Column Names("String") の代わりに << Get Column Names() を使用し、必要に応じて Column(string) で参照を取得します。
Column(- , "名前", "フォーマット済み")と
列 (名前) として同じではありません。 Column() は列への参照を返し、As Column は列に「アクセス」します (これが何を意味するかはケースによって異なります...)。 このスクリプトを初めて実行すると、Row() が JMP のインデックス作成用に適切に定義されていない (0 として初期化されている) ため、dt:timestamp は欠損値を返します。
もっと見る...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//Row() = 0;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"));
Row() = 1;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"), Column(dt, "name")[], Column(dt, "name")[Row()]);
Print(dt:name == Column(dt, "name"));
// 0
Print(Column(dt, "name") == As Column(dt, "name"));
//0
Print(dt:name == As Column(dt, "name"));
//1
stop();
//
Show(Column("name") << get values);
Show(As Column("name") << get values);
Show(:name << get values);
stop();
col1 = "name";
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(col1), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Eval(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(As Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(dt, col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
@ih列の名前の変更を管理する方法について、いくつかの良い提案があります。 また、たとえばグラフビルダーに列を挿入するときに、次を使用できますEval Insert、Eval Expr、Parse、および Substitute を使用して、ある式を別の式に挿入します。時には Eval()。 << Get Name は、時々、または Filter Col Selector / Col List Box を使用したユーザー インターフェイスの構築にも役立ちます ( @ポールディーン提案)。
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")このようなことを意味しますか?
コードを実行すると、TABLE SCRIPT の最初の 2 つのエントリが自動的に新しい名前に変更されました。
:"name"n でも機能しました
任意のグラフなどで同じ動作: 新しい列名に自動的に調整されます。
しかし、As column() と Column() では機能しませんでした。
元のスクリプトの列名もそうしませんでした:)
前:

後:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Script(
"script",
:name;
:"name"n;<BR /> As Column( "name" );
Column("name");
);
dt:name << Set Name( "name_2" );
dt:name[1]
Re: Column() vs As Column() vs dataable:column vs dt:As name("column")どうやってあなたスクリプトが参照する必要がある列を知っていますか?列名の変更を本当に監視する必要がある場合は、テーブルの変更をサブスクライブし、それらの列名をどこかに記録することでそれを行うことができますが、それはかなり複雑になると思います.代わりに、列のプロパティを定義して検索できますか?
スクリプト ガイドのサブスクライブの例:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
列のプロパティを使用
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];Re: Column() vs As Column() vs dataable:column vs dt:As name("column")numer column(dt, 1) で列にインデックスを付けるか、ユーザーに列を選択するか、列名を入力するように求めます。 ヘルプ ファイルで New Window() を調べます。