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