伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

FileMakerアプリケーションパス

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

5 Comments

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

  2. admin

    2011/6/11 土曜日 at 0:23:33

    hondaさん

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

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

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

  4. 私もあなたが言うと冲撃する方法もある。

  5. いい見事な内容で、たいしたものだ。

コメントを残す

Your email address will not be published.

*