スクリプト: スクリプト自体の (絶対) パスを取得する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP ユーザーの皆さん、こんにちは。
スクリプトファイルなど、同じディレクトリに配置する必要がある複数のファイルを使用するスクリプトを作成しています。 現時点では、「get current directory」コマンドを使用してこれらのファイルにアクセスしています。 残念ながら、これはユーザーがエクスプローラーでスクリプトをダブルクリックして JMP のインスタンスを開いた場合にのみ機能します。
JMP がすでに実行されており、ユーザーが [ファイル] -> [開く] -> [...] でスクリプトを開く場合。 現在のディレクトリは、スクリプトファイルのパスではなく、JMP インストールのパスです。
この問題を解決するために、スクリプトファイルのパスを取得する方法はありますか?
ありがとう、
セバスチャン
Re: スクリプト: スクリプト自体の (絶対) パスの取得私は JMP にかなり慣れていないので、この関数がどのくらい前から存在しているのかはわかりません。同様の問題を解決しようとしてこの関数を自分で見つけたところですが、「Include File List()」関数は次のリストを返すようです。実行中のスクリプトのコンテキストにあるファイルを開きます。 (ちなみに、Scripting Index やオンライン リソースのほとんどの関数/メソッド/メッセージと同様、この関数の説明は単なる情報提供にすぎません。)
スクリプトによって他のものが開かれる前にこの関数がスクリプトの先頭で実行されると、その時点で返される唯一のパスであるため、そこからスクリプト ファイル パスとスクリプト ファイル名を抽出できるようです。
JMP で開いている他のファイルでテストし、Windows エクスプローラーからスクリプトをダブルクリックして実行しました (スクリプトの先頭に「//!」を含めることにより、スクリプト エディタ ウィンドウを開かずに開いたときにスクリプトが実行されるように設定されています)。 )、そのスクリプトのパスのみが返されます。 開いている他のファイルは返されません。
Re: スクリプト: スクリプト自体の (絶対) パスの取得十分に考えられていない正規表現では...もしかしたらこれで十分かもしれません...
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
正規表現の前の txt 値は次のようになります。
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
正規表現はこれをキャプチャします
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
正規表現の 2 番目の引数はパターンです。つまり、
U: を検索し、その後に 0 個以上の空白またはタブ、次に空白またはタブではない 0 個以上の文字を検索します。 最後のビットは括弧内にあり、キャプチャ グループ \1 を形成します。これは、正規表現の結果がどのようになるかを指定する 3 番目の引数でもあります。
Re: スクリプト: スクリプト自体の (絶対) パスの取得
@pmroz書きました:
これであなたが望むことができるかもしれません:
デフォルトのディレクトリを取得()
通常、最初の文字はスラッシュであるため、「/M:/myapplication/bigdata/」のように削除します。
app_path = Substr(デフォルトディレクトリを取得(), 2, 999);
この解決策は、次の場合には失敗します。スクリプトまたはアプリケーションが HTML ドキュメントからハイパーリンク経由で起動された場合、Get Default Directory() は Web ブラウザーによって作成された一時フォルダーを返す可能性があります。
Re: スクリプト: スクリプト自体の (絶対) パスの取得ありがとうトム。いい考えだ!
ここで、「net use」が Windows 環境変数であれば、次のようなものを使用するだけです: Get Environment Variable("NETUSE") (もちろん機能しません)。DJ
Re: スクリプト: スクリプト自体の (絶対) パスの取得通常の SAS では、Windows (DOS) コマンド「net use」の出力を解析して、特定のドライブ文字にマップされているボリュームを見つけました。
Re: スクリプト: スクリプト自体の (絶対) パスの取得Get Default Directory () は、ユーザーがネットワーク ドライブ (例: X:\mynetworkpath\test.jsl) をマップする場合を除いて、うまく機能します。次に、完全なパスではなく、切り詰められたパスが取得されます (例: \\yournetwork.jmp.com\blahblah\mynetworkpath\test.jsl)。
これを回避する方法、つまりマップされていてもフルパスを実際に読み取る方法を知っている人がいたら、教えてください。thx..DJ
Re: スクリプト: スクリプト自体の (絶対) パスの取得それでおしまい!
ありがとうございます!
Re: スクリプト: スクリプト自体の (絶対) パスの取得これであなたが望むことができるかもしれません:
デフォルトのディレクトリを取得()
通常、最初の文字はスラッシュであるため、「/M:/myapplication/bigdata/」のように削除します。
app_path = Substr(デフォルトディレクトリを取得(), 2, 999);