FileMaker のデータファイルというものを使い始めた。これはなかなか可能性を秘めた機能だとすぐに気付く。最初はその独特な使い方を理解するのに苦労したが、だんだん分かってきた。
例えばログファイルのようなものでは、シーケンシャルにデータを順々に追記していく。FileMaker はデータファイルとしてそういうファイルの生成ができる。手始めにこれをやってみた。
順々に書き込む方法といっても、先頭に書き込んでいく方法と末尾に書き込んでいく方法の2種類が考えられる。その両方の方法を考えてみた。
環境:macOS Catalina Version 10.15.6(英語環境)、FileMaker Pro 18 Advanced
今回は分かりやすいように、1、2、3、4・・・と順々に書き込んでいくシチュエーションを想定してみる。
まずは末尾に書き込んでいく方法だ。以下のようなスクリプトはどうだろう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# テスト用に設定した変数。このスクリプトを実行するごとに変数の値がカウントアップする。 Set Variable [ $$abc ; Value: $$abc + 1 ] # ##### # エラー処理をオンにする。 Set Error Capture [ On ] # FileMakerファイルと同一パスにtest1.txtというデータファイルを書き出す。存在しない場合はデータファイルを作成する。 Set Variable [ $file ; Value: Substitute ( Get ( FilePath ) ; Get ( FileName ) & ".fmp12" ; "" ) & "test1.txt" ] Get File Exists [ “$file” ; Target: $fileExists ] If [ not $fileExists ] Create Data File [ “$file” ; Create folders: Off ] End If # データファイルを開く。 Open Data File [ “$file” ; Target: $fileID ] # データファイルのファイルサイズを取得し、位置(=書き込み位置)を設定する。これによって、書き込み位置がファイルの末尾になる。 Get File Size [ “$file” ; Target: $FileSize ] Set Data File Position [ File ID: $fileID ; New position: $FileSize ] # テスト用変数を書き込む。「Append line feed」オプションを付けることで、改行区切りで書き込みができる。 Write to Data File [ File ID: $fileID ; Data source: $$abc ; Write as: UTF-8 ; Append line feed ] # データファイルを閉じる。 Close Data File [ File ID: $fileID ] # エラー処理をオフに戻す。 Set Error Capture [ Off ] |
これで
1
2
3
4
5
のような内容のファイルができる。
ポイントとはファイルサイズを取得し、それを位置に設定することで末尾への追記が可能となることだ。
次は先頭に書き込む方法。以下がそのスクリプトだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# テスト用に設定した変数。このスクリプトを実行するごとに変数の値がカウントアップする。 Set Variable [ $$abc ; Value: $$abc + 1 ] # ##### # エラー処理をオンにする。 Set Error Capture [ On ] # FileMakerファイルと同一パスにtest2.txtというデータファイルを書き出す。存在しない場合はデータファイルを作成する。 Set Variable [ $file ; Value: Substitute ( Get ( FilePath ) ; Get ( FileName ) & ".fmp12" ; "" ) & "test2.txt" ] Get File Exists [ “$file” ; Target: $fileExists ] If [ not $fileExists ] Create Data File [ “$file” ; Create folders: Off ] End If # データファイルを開く。 Open Data File [ “$file” ; Target: $fileID ] # データファイル内容を読み取り、$fileContentという変数に格納する。 Read from Data File [ File ID: $fileID ; Target: $fileContent ; Read as: UTF-8 ] # テスト用変数&データファイルの中身、という新たな変数$resultを設定する。 Set Variable [ $result ; Value: $$abc & "¶" & $fileContent ] # 位置(=書き込み位置)を0、すなわちデータファイルの先頭に設定する。 Set Data File Position [ File ID: $fileID ; New position: 0 ] # $result変数をデータファイルに書き込む。 Write to Data File [ File ID: $fileID ; Data source: $result ; Write as: UTF-8 ] # データファイルを閉じる。 Close Data File [ File ID: $fileID ] # エラー処理をオフに戻す。 Set Error Capture [ Off ] |
これで
5
4
3
2
1
のような内容のファイルができる。
ファイルの中身を一旦変数に格納し、書き込むデータと連結してまた別の変数に格納する。その上で、0の位置に書き込む。こうすることで、スクリプトの実行ごとに先頭に順々に書き込まれていく。
参考:
データファイルを作成
https://fmhelp.filemaker.com/help/18/fmp/ja/index.html#page/FMP_Help/create-data-file.html
データファイルに書き込む
https://fmhelp.filemaker.com/help/18/fmp/ja/index.html#page/FMP_Help/write-to-data-file.html
データファイルから読み取る
https://fmhelp.filemaker.com/help/18/fmp/ja/index.html#page/FMP_Help/read-from-data-file.html
データファイルの位置を取得
https://fmhelp.filemaker.com/help/18/fmp/ja/index.html#page/FMP_Help/get-data-file-position.html
データファイルの位置を設定
https://fmhelp.filemaker.com/help/18/fmp/ja/index.html#page/FMP_Help/set-data-file-position.html
FileMaker 18のデータファイル操作スクリプトステップを探る |
https://notonlyfilemaker.com/2019/07/exploring-filemaker-18s-file-manipulation-script-steps/
FikeMaker18で追加されたファイル操作機能を使ってシーケンシャルログを書き出す – Qiita
https://qiita.com/kk-ster/items/2b01aa9415c1ff796c9e
FileMaker Pro 18 Advanced の新機能【スクリプトステップ:外部データファイルの読み取り/書き込み】 | イエスウィキャンのファイルメーカー情報
https://ywc.com/filemaker/?p=6358