FileMakerで外部の言語やスクリプトと連携するときに、
FMのファイルのパスを取得したいことが結構ある。
 
ただ、FMの標準関数で取得できるのは、FM独自のパス構造で、
書き換えが必要。そんな時のスニペット

Mac用がこちら

Let (
$path = Substitute ( Replace ( Get ( ファイルパス ) ; 1 ; 5 ; "" ) ; "/" ; ¶ ) ;
"/Volumes" & Substitute ( LeftValues ( $path ; ( ValueCount ( $path ) - 1 ) ) ; ¶ ; "/" )
)

でWin用がこちら

Let (
$path = Substitute ( Replace ( Get ( ファイルパス ) ; 1 ; 5 ; "" ) ; "/" ; ¶ ) ;
Substitute (MiddleValues ( $path ; 2 ; ( ValueCount ( $path ) - 2 )  ) ; ¶ ; "\\" )
)

これでFMのデータベースファイルのある
ディレクトリパスが(絶対パス)取得できます。
 
スタンドアロンで動いていることを前提としています。
サーバーで使う場合は、パス構造がかなり違うので、
ご注意ください。

トラックバック

このブログ記事に対するトラックバックURL:

コメント & トラックバック

Winの方、Windows Networkの共有ディレクトなんかで算出できないですが、元のGet(ファイルパス)がそういう仕様なんで、やっぱりネットワーク越しに開くなって事なんでしょか。
あと、テンポラリ目的なら、Let()内で変数の$は付けない方が良さそうです。

hondaさん

コメントありがとうございます。
ご指摘のとおり、この書式ですとネットワーク越しの
パスを取得するには計算をかえるひつようがあります。
あくまでローカル用ですね。
 
共有の場合は使用上取得がどうにもならないので、
FMだけで考えるよりはWin32APIなどへのブリッジで
対応したほうがトラブルがすくないと思われます。

あ、 $ 、そうですね。。。ごめんなさい。
毎回コピペでスニペット化してたものを貼りつけただけなので、
このへんは適宜読み替えてください。ということでご勘弁を。

なんか偉そうなツッコミみたいでごめんなさい。
自分自身もこの手の計算式はコピペで済ませてる口で、むしろ自分の使ってるファイルパス取得用よりシンプルなので、公開してもらえて嬉しいです。
ネットワークボリュームの取得については、FileMaker単体では諦めました。FileMakerで共有されている場合は、ホストやらから割り出してますが、OSのネットワークボリュームから直接開いてる場合は、仰るようにOS側の機構使わないと無理っぽいです。

Comment feed

コメントする