スクリプトのペアを作成しようとしています。1つ目は列名と式をリストに保存し、2つ目は名前空間を使用してそれらを別のデータテーブルに適用することです。 私は基本的な名前空間の概念を扱っていると思いますが、問題はプロパティに適用されています。 任意の助けは大歓迎です。
スクリプト1:
clear symbols(); //for debug
Names Default to Here(1); //namespace declaration,create variables in local scope only
ns = New Namespace("outer");
dt = Current data table();
if(isEmpty(dt),
try(dt = Open(), Throw("No data table found"))
);
nc = nCol( dt );
ns:names = dt << Get Column Names();// get column names
print(ns:names);
ns:formulaList={};
For( i = 1, i < N Items(ns:names), i++,
col = Column(i);
ns:formulaList[i] = col << get Property( "Formula");
);
print (ns:formulaList);
ns <<LOCK></LOCK>
出力:
{Col1、umn 2、Con 4、列}
{Empty()、:Col1 + 8、:umn 2 * 3}
スクリプト2:
Clear Symbols(); //for debug
Names Default to Here(1); //namespace declaration,create variables in local scope only
ms=namespace("outer");
dt = Current Data Table();
If( Is Empty( dt ),
Try( dt = Open(), Throw( "No data table found" ) )
);
colSize = N Col( dt );
ListSize = N Items(ms:names);
For( i = 1, i < ListSize + 1, i++,
if(i > colSize, New Column( "temp" ));//create columns to accomidate list size
print(ms:names[i]);
Column(i) << Set NAME(ms:names[i]);//set column names
//col << Formula( Eval(ms:formulaList[i]) );//set column formulas
);
print(ms:formulaList);
//ms << Delete;
出力:
Col1
ええと2
コン4
カラム
{Empty()、:Col1 + 8、:umn 2 * 3}
2つの主な問題 2番目のデータテーブルの列名は新しい名前を引き継ぎませんそして、コメント化されていない場合はcol <<数式が壊れます。 さまざまな方法を試してみましたが、どちらかがうまくいくことにはまだ成功していません。
*編集 - 2番目のスクリプトにリスト/列サイズのチェックを追加
*最初の質問を解決しました。下記の回答を参照してください。
今問題は、それが動作することを可能にすることを期待している特定の「タイプ」フォーミュラまたはセットフォーミュラがありますか?
ありがとうございます。良いJMPの例は見つけるのが難しいです。 私にはスクリプトガイドはそれを使っているもののための実用的な例のほとんどを欠いているようです。これがどのように機能しているかを完全に理解するには、これらの関数のいくつかを調べなければなりませんが、あなたが提供した完全な図を使うとはるかに簡単です。
これは、列、すべてのプロパティ、名前、式を作成し、値を作成しないという提案です。
添付のスクリプトはcolref << getスクリプトを使用し、Big Class.jmpを使用してスクリプトを示しています。
列の命名問題の解決策は "型"の問題でした...
スクリプト1の解決策:
ns:names = dt << Get Column Names("String");// get column names