スクリプトを使用してMApロールを設定するこんにちは、
初心者がテーブル変数やマップロールなどのデータテーブルにいくつかのパラメーターを設定できるように、スクリプトを作成しています。
問題は、マップロールを設定すると、ファイルパスが列のプロパティに記録されないことです。
path = pick file ();
dt0:my_column << set property ("Map Role", Map Role ("Shape Name Use" (path), "My_column") ) ) ;これを引き起こす原因は何ですか?
Re:スクリプトを使用してMApロールを設定するOK、しばらくこれをいじった後、問題の場所がわかります:
Windowsのファイルパスは次のようになりますC:\ user \ file.txt
pick file()を使用してjmpでパスを抽出すると、「C:/user/file.txt」に変換されます。これは、JMPが「\」を特殊文字と見なしているためだと思います。奇妙なことに、他のJSL命令では、ファイルパスにJMP構文を使用できますが、何らかの理由で、Map Roleは通常のWindows構文を使用します。
今私の質問は次のとおりです。JMPファイルパスをWindowsファイルパスに変換する簡単な方法はありますか?次のように記述する必要を回避するもの:
「C:\!\ user \!\ file.txt」
または、列のプロパティに直接アクセスし、マップロールペインでファイルを選択するためにプロンプトを開くことができるスクリプトも役立ちます。
ありがとう
Re:スクリプトを使用してMApロールを設定するOK、これに対する解決策を見つけたようです:
dt= open (pick file (), invisible ) ;
path = dt<< get path;
dt<<CLOSE></CLOSE>
これで解決するようです
Re:スクリプトを使用してMApロールを設定するまた、パスを持つ引数は文字列ではなく名前付き引数であると思うので、次のようになります。
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use( path ), "My_column" ) ) ) ;
ところで、JMPはWindows形式ではなくPOSIXパス形式をデフォルトで使用します。ただし、通常は自動的に変換されるか、組み込み関数を明示的に呼び出して2つの形式間で変換できます。
Re:スクリプトを使用してMApロールを設定するそのルートは少し回り道であり、不要です。こちらをご覧ください関数 。
Re:スクリプトを使用してMApロールを設定するありがとうしゅう 、
ここで何かを学びました。Posixが何であるか知らなかった:)
スクリプトインデックスでPOSIXを検索すると、変換関数が見つかりました。
path = pick file () ;
converted_path= Convert File Path (path, windows) ;
<< get pathメッセージを使用する場合と比較すると、これによりテーブルを開く必要がなくなります。
Re:スクリプトを使用してMApロールを設定するだから私はテキスト文字列からこのプロパティを設定することができますか?
これは「名前付き引数であり、文字列ではない」と言いました。これは何を意味するのでしょうか ?これはJSLの欠点であり、システムは非常にシンプルで柔軟であるため、ユーザーは操作対象の正確な性質を知らない
私は次の構文を試してみました:
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Eval( path) ), "My_column" ) );
dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Expr( path) ), "My_column" ) );
Eval Expr (dt0:my_column << Set Property ( "Map Role", Map Role( Shape Name Use(Expr( path) ), "My_column" ) ) );
Re:スクリプトを使用してMApロールを設定するそれは単純だ。さまざまな引数の例を次に示します。
リテラル引数、数値または文字列:
x = Sqrt( 5 );
x = Num( "5" );
可変引数:
x = 5;
y = Sqrt( x );
名前付き引数:
dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
最後の例には、名前付き引数(Y、X、およびFit Line)とリテラル引数(:weightおよび:height)が含まれています。元のコードは、Shape Name Use()という名前の引数を文字列区切り文字で囲み、文字列引数にしました。
再:スクリプトを介してマップの役割を設定しますさて、ついに私のスクリプトは機能します:)
どういうわけか、私が書いたとき:
dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (path, "my_column" ) ) ;変数パスに含まれる文字列をcolumnプロパティに転送しません。Eval(path)やその他の回避策を使おうとすると、それでも機能しません。JSLはこのメッセージ内の変数の評価をサポートしていないと思います。
だからここに私が見つけた回避策があります:
My_expression = Eval Expr ( dt0:my_column << set property ("Map Role", Map Role (Shape Name Use (Expr(path), "my_column" ) ) );
Eval (My_expression); そして、これはついにトリックを行います!
列プロパティは両方の形式を受け入れるため、パスをposixからWindowsに変換する手順は最終的には必要ありませんでした。