FileMaker でメディアデータベースを作るのが難しいのは、そもそも対応ファイルタイプが限られているからです。FM仕草を基準とした分類を作って、拡張子からFileMaker対応の可否を知り、備えましょう。分類のためのフィールド、FMType を作ります。
FileMaker仕様の分類 FMType
FMType という分類用のフィールドを作って、自作FM書類で画像やメディアのデータベースを作る際に利用しましょうというお話です。
FMTypeフィールドに何が入るかというと、”picture” “video” “audio” “pdf” です。その他 “other” も入れておきましょうか。これが何かというと、FileMaker が対応するメディアタイプの中で分類したものです。
FileMaker はメディアを扱うことができますが、対応している拡張子は限られています。画像やメディアのデータベースを作る際、FileMaker が対応しているかどうかで、スクリプトの対応が変わったりします。
知識
FileMaker Pro が対応するファイルタイプはヘルプページに載っていますので、それを知ります。オブジェクトフィールドのデータ操作 ver.19 によりますと以下です。
ファイルタイプ サポートされる形式タイプ ピクチャ Encapsulated Postscript (.eps)
GIF (.gif)
HEIF/HEIC (.heic) (macOS, iOS, iPadOS)
JPEG/JFIF (.jpg)
PDF (.pdf) (macOS)
Photoshop (.psd) (macOS)
PNG (.png)
TIFF (.tif)
Windows ビットマップ (.bmp)
Windows メタファイル/拡張メタファイル (.wmf/.emf) (Windows)オーディオ/ビデオ AIFF オーディオファイル (aif、.aiff)
AVI ムービー (.avi)
FLAC オーディオファイル (.flac) (iOS、iPadOS)
MP3 オーディオファイル (.mp3)
MPEG-4 オーディオファイル (.m4a)
MPEG-4 ムービー (.mp4)
MPEG ムービー (.mpg、.mpeg)
MPEG-4 ビデオファイル (.m4v)
QuickTime ムービー (.mov、.qt) (下記のメモを参照)
Sun オーディオファイル (.au)
WAVE オーディオファイル (wav)
Windows Media Audio (.wma)
Windows Media Video (.wmv)https://help.claris.com/ja/pro-help/content/data-in-container-fields.html
拡張子が分類されていることが判ります。知識を得ました。
分類 FMType の値とはズバリ、上記引用テーブルの左側、ピクチャ、オーディオ/ビデオ、PDF のことです。ヘルプではビデオとオーディオが一緒くたになってるので、次のように定めなおします。
- ピクチャ
- オーディオ
- ビデオ
- その他
下準備
分類の値を手作業ではなく計算で自動入力させるには準備が要ります。上記引用を元に、あらかじめ値一覧を作ります。面倒でもヘルプを見ながら作りましょう。これが要となります。
こんな感じで、オーディオ、ビデオの値一覧も作ります。
できました。準備OKです。PDFは作っていませんがまあいいですよね。
フィールド FMType の計算式
FMTypeの前に必要なフィールドがあります。拡張子フィールドです。なぜなら、FMType の計算式では拡張子を基に判定するからです。
拡張子のフィールドはファイル名やパスから計算で作りましょう。普通の人ならファイル名やパスから拡張子を作ることに大きな問題はないかもしれません。ファイルパスに必ず拡張子が付いていることが前提なら、パスの “.” を ¶(改行)に置換して最後の行が拡張子です。
GetValue ( Substitute ( パス ; "." ; ¶ ) ; ValueCount (Substitute ( パス ; "." ; ¶ ) ) )
古いMacユーザーならそう簡単にはいきません。難易度が激上がりします。拡張子の話をし始めると大変なのでここはすっ飛ばして、拡張子フィールドが完成していることとして話を進めます。
FMType を計算するには、拡張子を見て値一覧に含まれるかどうか判断します。case 関数を使って振り分ければ良いですね。
Let ( [ ext = mainDataTable::拡張子 ; picture = ValueListItems ( Get(ファイル名) ; "FMpicture" ) ; audio = ValueListItems ( Get(ファイル名) ; "FMaudio" ) ; video = ValueListItems ( Get(ファイル名) ; "FMvideo" ) ; FMT = Case ( not IsEmpty ( FilterValues ( picture ; ext ) ) ; "picture" ; not IsEmpty ( FilterValues ( audio ; ext ) ) ; "audio" ; not IsEmpty ( FilterValues ( video ; ext ) ) ; "video" ; ext = "pdf" or ext = "PDF" ; "pdf" ; "other" ) ]; FMT )
こんなふうに、FMType を自動で分類できました。
FMType があることで、スクリプトや他の計算式などで利用しやすくなります。
さて、さきほどすっ飛ばした難易度の高い拡張子フィールドについて、少し予告的に触れておきます。
拡張子の取得について
普通の人ならファイル名やパスから拡張子を作ることは簡単、でも古いMacユーザーの場合そう簡単にはいきません。と書きましたがその続きです。
昔Macのファイルには拡張子がなかったので、古いユーザーのHDDには拡張子のないファイルが存在します。拡張子がないだけならまだしも、ファイル名の中に .(ドット)が含まれたファイルもあります。「ornament.ai.1994.3.12」だの「検討案.v3.new」だのです。こういうパスに対して「 .(ドット) を改行に置換して最後の行が拡張子」などと判断しようものなら、とんでもないテキストが拡張子フィールドに収まってしまいます。
必死こいて計算式を考え、妥協できる「拡張子を取得する計算式」を作りましたが、それでも妥協に過ぎず「.new」なんかを見分ける術はありません。
本気でやるんなら、コマンドラインツール(exittoolとか)を使って type を取得してからファイルにくっ付いている拡張子(のように見えるもの)を比較して判断するなどの手間暇をかける以外にないと思いますが、さすがにそこまでやる気ないですし。
で、それもあって、ファイルメーカー書類 FileTypeExtension.fmp12 を作ったわけです。そこそこ自動で拡張子を取得し、目視で判断するという半アナログチックな拡張子データベースです。このファイルを画像データベースから外部ソースとして参照、インポート時などに活用します。
拡張子や FileTypeExtension.fmp12 については、また別の投稿にて。ではごきげんよう。