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のデータベースファイルのある
ディレクトリパスが(絶対パス)取得できます。
スタンドアロンで動いていることを前提としています。
サーバーで使う場合は、パス構造がかなり違うので、
ご注意ください。
Winの方、Windows Networkの共有ディレクトなんかで算出できないですが、元のGet(ファイルパス)がそういう仕様なんで、やっぱりネットワーク越しに開くなって事なんでしょか。
あと、テンポラリ目的なら、Let()内で変数の$は付けない方が良さそうです。
hondaさん
コメントありがとうございます。
ご指摘のとおり、この書式ですとネットワーク越しの
パスを取得するには計算をかえるひつようがあります。
あくまでローカル用ですね。
共有の場合は使用上取得がどうにもならないので、
FMだけで考えるよりはWin32APIなどへのブリッジで
対応したほうがトラブルがすくないと思われます。
あ、 $ 、そうですね。。。ごめんなさい。
毎回コピペでスニペット化してたものを貼りつけただけなので、
このへんは適宜読み替えてください。ということでご勘弁を。
なんか偉そうなツッコミみたいでごめんなさい。
自分自身もこの手の計算式はコピペで済ませてる口で、むしろ自分の使ってるファイルパス取得用よりシンプルなので、公開してもらえて嬉しいです。
ネットワークボリュームの取得については、FileMaker単体では諦めました。FileMakerで共有されている場合は、ホストやらから割り出してますが、OSのネットワークボリュームから直接開いてる場合は、仰るようにOS側の機構使わないと無理っぽいです。
Comment feed