FileMaker Pro 18 Advancedの新機能【スクリプトステップ:外部データファイルの読み取り/書き込み】
2019年06月03日 10:00 AM
FileMaker 18
FileMaker Pro 18 Advancedでは外部データファイルの読み取り/書き込みについてのスクリプトステップが多数追加されました。
・データファイルを作成
・データファイルを開く
・データファイルを閉じる
・データファイルから読み取る
・データファイルに書き込む
・データファイルの位置を取得
・データファイルの位置を設定
・ファイルの存在を取得
・ファイルサイズを取得
・ファイルを削除
・ファイルの名前変更
これらについて紹介します。
まず、【外部データファイル】って??となると思いますが、
オープンデータファイルのことで、テキストベースでオープンかつ単純な形式のファイルです。
(バイナリファイルも一部ステップでは使えるのですが、書き込んだりできるのはテキストベースのファイルのみのようです。)
外部データファイルの読み取り/書き込みをするためのステップと、補助的な役割をするステップとなっています。
これまでテキストファイルにFileMakerからデータを書き出したりはできましたが、
書き出されている情報を読み取ったり、編集をしたりはできませんでした。これができるようになったということですね!
どのように使うのかを紹介したいと思います。
まずは処理の流れです。
順番に見ていきましょう。
1. データファイルを作成
書き出し場所のファイルパスを設定し、もし、そこにデータファイルが存在しなければデータファイルを作成するという流れです。
スクリプト例としてはこんな感じでしょうか。
このスクリプト例に沿ってみていきます。
【ファイルの存在を取得】ステップではオプションの【ソースファイル】で指定したパスにファイルが存在していれば「1(真)」を返し、それ以外では「0(偽)」を返します。
オプションの【ターゲット】ではフィールドか変数を指定でき、そこに返り値を設定します。
上記スクリプト例ではデスクトップに「test.txt」というデータファイル(ここではテキストファイルにしてみました。)があれば変数「$FileExist」に1を、なければ0を設定します。
ファイルが存在しない場合は、
【データファイルを作成】ステップでデータファイルを作成します。
ファイル指定で作成先のファイルパスを指定します。オプションの【フォルダを作成】をオンにすると、指定したパスのフォルダが存在しないときにフォルダを自動的に作成します。
2. データファイルを開く
データファイルを作成したら、データファイルを読み取り/書き取りするためにデータファイルを開く必要があります。
ファイルを開くといっても実際に開かれるのではなく、FileMakerプラットフォーム内で開いてロックをする、ということです。データファイルを開くと同時にそのデータファイルにファイルIDが設定されます。ファイルIDは開いた順番に1から設定されます。
(FileMakerアプリケーションを終了した場合に自分が開いたデータファイルは全て閉じられ、ファイルIDはリセットされます。カスタムAppを閉じるだけではリセットされません。)
オプションの【ターゲット】ではフィールドか変数を指定でき、そこに開いたデータファイルのファイルIDを設定します。
このスクリプト例ではデスクトップにある「test.txt」というファイルを開き、そのファイルIDを変数「$FileID」に設定をします。
もし、すでに開かれている場合はエラー番号300【ファイルがロックされているか、使用中です】が返ります。
※ファイルが既に開かれている場合は、ファイルIDを取得することができないので、スクリプト自体を終了する、違うファイル名で新しくファイルを作成する等のエラー処理が必要です。
※【ファイルを削除】ステップでデータファイル削除しようとしても、開かれているファイルの削除はできませんし、【データファイルを閉じる】ステップではファイルIDを指定しないと閉じることもできません…。
ここまでのステップでデータファイルの作成ができました。
ここからはすでに存在するデータファイルを読み取ったり、書き込んだりするためのステップです。
以下のスクリプトは先ほどのスクリプト例の続きです。
3. データファイルの位置を取得、データファイルの位置を設定
読み取り/書き込みをする際にもデータファイルの「どこから」読み取り/書き込みをするのか設定しなければなりません。
【データファイルの位置を設定】スクリプトステップでどこから読み取り/書き込みをするのかを指定します。
まず【ファイルID】でどのファイルの書き込み/読み取りをするのか指定します。そして、【新しい位置】で開始したい位置を指定します。指定する単位はバイト数です。また、最初から書き込み/読み取りをしたい場合は「0」を指定します。「1」からではないので気を付けましょう。
例えば、「abcde」という半角英字5文字が入力されたデータファイルの
dから読み取りたい場合は「3」を、
eのうしろに書き込みをしたい場合は「5」を
設定します。
【データファイルの位置を取得】スクリプトステップでは、今どこに読み取り/書き込み開始位置が設定されているのかを取得することができます。
オプションの【ターゲット】ではフィールドか変数を指定でき、そこに取得した読み取り/書き込み位置を設定します。
上記スクリプト例では【データファイルの位置を設定】を使用して書き込み/読み取り位置をファイルの0バイト目(最初から)に設定しています。そして、位置を正しく設定できたか確認のため、【データファイルの位置を取得】で設定した書き込み/読み取り位置の取得をし、変数「$StartPoint」に設定しています。
※【データファイルの位置を取得】は使用しなくても書き込み/読み取りはできますが、エラー処理や、デバッグをする際に役立ちますので使用するといいでしょう。
4. データファイルから読み取る、データファイルに書き込む
書き込み位置/読み取り位置の設定をしたら読み取り/書き込みの実行です。
- 書き込み
書き込みの場合は書き込みするデータを事前に作成し、変数もしくはフィールドに設定しておく必要があります。
【データファイルに書き込む】スクリプトステップで、【ファイルID】に書き込むファイルIDを、【データソース】に書き込むデータ(変数もしくはフィールド値)を、設定します。最後の【改行を追加】にチェックを入れると、書き込んだデータの最後に改行が追加されます。
また、【書き込み】では書き込む文字コードを【UTF-8】、【UTF-16】から選択できます。
このスクリプト例では変数「$書き込みデータ」に書き込みたいデータを設定し、それをUTF-8でデータファイルの先頭から書き込んでいます。
★書き込みの際の注意点です。
・書き込み実施後のデータ読み取り/書き込み位置は書き込んだデータのすぐ後ろに設定されます。
このスクリプトステップで空のデータファイルに
5バイト分の文字を書き込みをすると、
データ読み取り/書き込み位置は「5」に変わります。
・作成直後の空のデータファイルに【データファイルの位置を設定】で5バイトが設定されている状態で書き込みを行うと、最初に5バイト分のスペースが追加され、その後からデータが書き込まれます。
・書き込みは「上書き」です。「挿入」ではないので注意が必要ですね。
・日本語は基本的に1文字3バイトです(UTF-8)。書き込みでデータの上書きをするときに、文字の切れ目ではないバイト数から書き込みを始めると、文字化けを起こしてしまいます。
- 読み取り
【データファイルから読み取る】スクリプトステップで、【ファイルID】に読み取るファイルIDを設定します。読み取ったデータは【ターゲット】で指定した変数もしくはフィールドに設定されます。
【サイズ】に読み取りたいバイト数を任意で設定します。設定しない場合、すべてのデータが読み取りされます。
【読み取り】では【UTF-8】【UTF-16】【バイト】を選択することができます。(バイトを選択して読み取りしたところ、データファイル名が読み取りされました。ターゲットを変数やオブジェクトフィールドにすると、読み取ったデータをデータファイルとして格納します。)
★読み取りの際の注意点です。
・読み取り実施後のデータ読み取り/書き込み位置は読み込んだデータのすぐ後ろに設定されます。
「abcde」という半角英字5文字が入力されたデータファイルを
先頭から3バイト(cまで)読み取りをすると、
データ読み取り/書き込み位置は3に変わります。
・書き込みが行われた文字コードで読み取る必要があります。異なる文字コードで読み取りをしようとすると、エラー番号3【コマンドが使用できません】が返ります。特定されていない文字コードの場合【読み取り】でバイトを指定するとよいです。書き込み同様に日本語データの扱いには注意が必要です。
・【データファイルの位置を設定】スクリプトステップで読み取り開始位置を設定しても、【データファイルから読み取る】スクリプトステップのサイズを指定していないと全てのデータの読み取りがされます。
・【データファイルから読み取る】スクリプトステップで指定したサイズが、読み取り位置以降のデータのサイズより大きい場合、【ターゲット】で指定した変数・フィールドには開始位置以降のデータが設定され、さらにエラー番号10【要求されたデータが見つかりません】が返ります。
5. データファイルを閉じる
読み取り、書き込み等の処理が終わったら必ずこの【データファイルを閉じる】スクリプトステップでデータファイルを閉じましょう。
データファイルを閉じるには、開いた際のファイルIDを指定して閉じます。
さて、これで流れを一通り見てみました。ここまでで確認したスクリプトステップではいずれもデータファイルを開いた際のファイルIDを指定する必要があります。開いたファイルIDがわからなくなると、データファイルの操作ができなくなってしまうため、開いた際のファイルIDの取り扱いには注意が必要です。
さて、まだ紹介していないスクリプトステップもありますので、最後に簡単に紹介します。
【データファイルを削除】
ターゲットファイルで指定したパスのファイルを削除します。データファイルに限らず削除ができるので、削除する場合は注意しましょう。
また、【データファイルを開く】でファイルを開いた状態だったり、他のアプリケーションで開いているファイルは削除されず、エラー番号300【ファイルがロックされているか、使用中です】が返ります。
【ファイルの名前変更】
ソースファイルで指定したパスのファイル名を【新しい名前】で設定したファイル名へ変更します。
このスクリプトステップでも、【データファイルを開く】でファイルを開いた状態だったり、他のアプリケーションで開いているファイルの名前変更はされず、エラー番号300【ファイルがロックされているか、使用中です】が返ります。
以上、FileMaker Pro 18 Advanced で追加された外部データファイルの読み取り/書き込みについてのスクリプトステップについて紹介しました。
これを使用してバッチファイルの作成をしたり、スクリプトを実行した際のオリジナルのログファイルを作成したりと活用が出来そうですね。ぜひ使ってみてください。