FileMaker のデータファイルを先頭あるいは末尾に追記していく
FileMaker のデータファイルというものを使い始めた。これはなかなか可能性を秘めた機能だとすぐに気付く。最初はその独特な使い方を理解するのに苦労したが、だんだん分かってきた。
例えばログファイルのようなものでは、シーケンシャルにデータを順々に追記していく。FileMaker はデータファイルとしてそういうファイルの生成ができる。手始めにこれをやってみた。
順々に書き込む方法といっても、先頭に書き込んでいく方法と末尾に書き込んでいく方法の2種類が考えられる。その両方の方法を考えてみた。
環境:macOS Catalina Version 10.15.6(英語環境)、FileMaker Pro 18 Advanced
今回は分かりやすいように、1、2、3、4・・・と順々に書き込んでいくシチュエーションを想定してみる。
まずは末尾に書き込んでいく方法だ。以下のようなスクリプトはどうだろう。
# テスト用に設定した変数。このスクリプトを実行するごとに変数の値がカウントアップする。
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
のような内容のファイルができる。
ポイントとはファイルサイズを取得し、それを位置に設定することで末尾への追記が可能となることだ。
次は先頭に書き込む方法。以下がそのスクリプトだ。
# テスト用に設定した変数。このスクリプトを実行するごとに変数の値がカウントアップする。
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
Recent Posts
Archives