8 返信 最新の回答 日時: Jun 12, 2017 1:49 AM ユーザー:mddld

    FileMaker Go でのCSVファイルインポート高速化

    mddld

      いつも拝見しております。

       

      現在開発中のFMGソリューションで、iPadにcsvファイルを転送し、そのcsvファイルの内容を、

      FMGソリューションにインポートする操作があります。

       

      FMGには、csvファイルのインポートはサポートされていませんので、具体的に以下のようにスクリプトを組んでいます。

      ①「URLから挿入」でcsvファイルパスを指定し、テキストフィールドにcsvファイルの内容を格納。

      ②格納したcsvファイルの内容をテキスト形式の値とみなし、まず1行分を変数に代入(GetValue関数で1行分取得)

      ③データを格納するテーブルレイアウトに切り替え、②のデータをリスト化(カンマ→改行区切り)、

       テーブルのフィールドをループで移動しながら、リスト化した②のデータをGetValue関数で取得し、フィールドに格納。

      ④②-③をcsvの行数分ループ。

       

      テストで使用しているCSVデータの行数が最大で6500件、更に増える予定ですが、数は現時点でわかっていません(後に提供してもらうデータなので)

      また、カラム数も200ほどあります。

       

      FMP上では、取り込むのに4~5分かかっていますが、FMG上では1時間弱かかってしまいます。

      行×列の数をループして1件ずつ値を格納しているので、時間がかかってしまうのだと思いますが、

      高速化できないものでしょうか。

       

      スクリプトを言葉で表現しましたので、わかりにくい場合はスクリプトを掲載します。

       

      FMGのみの制約があり、確かExcelもインポート対象外だったはずなので、苦肉の策といったところなのですが…。

       

      何か方法がありましたらご教示よろしくお願い致します。

        • 1. Re: FileMaker Go でのCSVファイルインポート高速化
          shin

          > テーブルのフィールドをループで移動しながら、リスト化した②のデータをGetValue関数で取得し、フィールドに格納。

          ここがネックなんでしょう。

          別のテーブルに同じ構成フィールドのものを作り、それぞれのフィールドを計算フィールドにしておきます。変数に格納した1行分からそれぞれのフィールドのデータを取り込ませておきます。そのテーブルの1レコードをインポートするとかなり早くなるかもしれません。ただ、2倍程度かも。

          もう少しレコード数が少ないのでしたら、繰り返しフィールドに格納しておいて、一気にインポート、という手もあるのですが。10レコードくらいずつ区切って処理も可能かもしれません。

          • 2. Re: FileMaker Go でのCSVファイルインポート高速化
            mddld

            shin様

             

            早速のご回答ありがとうございます。

            計算フィールドを使用する方法は有効そうです。

             

            スクリプトの検証で、「次のフィールドへ移動」スクリプトステップがパフォーマンスに影響していることもわかってきました。「次のフィールドへ移動」スクリプトステップのパフォーマンスについて掲載している資料などありますでしょうか?調べてみましたが見つけられず。。

            ちなみに、scvファイルのデータはほとんど参照として使用します。

             

            テーブル構造を見直してスクリプトを組んでみます。

            • 3. Re: FileMaker Go でのCSVファイルインポート高速化
              user19752
              1. フィールド参照は1回だけであとは変数を使う
              2. 常に先頭の要素を取り出して、取り出したら削除する
              3. なので、リスト化せずカンマのまま処理

              で改善しませんか?

              • 4. Re: FileMaker Go でのCSVファイルインポート高速化
                shin

                別の提案を。

                設定するテーブルの各フィールドに、自動入力で、GetValue ( 変数 ; n ) を設定しておきます。(数が多いので大変ですが、楽にする方法はあります)

                csvを変数に格納しておきます。

                1行取り出して変数へ格納、カンマを改行へ置き換えておきます。

                その状態で、新規レコード を行うと、フィールドの設定は全て終わっているはずです。

                これを行数だけ繰り返せばいいです。

                1 人中 1 人が役に立つと言っています
                • 5. Re: FileMaker Go でのCSVファイルインポート高速化
                  mddld

                  user19752様

                  shin様

                   

                  回答ありがとうございます。

                  最初にshin様からいただいた回答の計算フィールドというキーワードをもとに、まさに自動入力で計算式を設定し、トライしているところでした。

                   

                  >(数が多いので大変ですが、楽にする方法はあります)

                   

                  もしよろしければ、この部分について具体的に教えていただくことは可能でしょうか。

                  • 6. Re: FileMaker Go でのCSVファイルインポート高速化
                    mddld

                    shin様のテーブルの各フィールドに自動入力で計算式を設定する方法でパフォーマンスを検証し、当初のインポートにかかっていた時間から10分の1以下に短縮することができました。

                     

                    また、環境を記載していませんでしたが、FMG16用のカスタムAppをFMPA16で開発しておりました。

                    質問としてあげるところを、ディスカッションとしてあげてしまっていました。

                     

                    ご回答いただいたuser19752様、shin様には感謝いたします。

                    ありがとうございました。

                    • 7. Re: FileMaker Go でのCSVファイルインポート高速化
                      shin

                      >(数が多いので大変ですが、楽にする方法はあります)

                       

                      フィールド定義で、それらのフィールドをコピーします。

                      その時、クリップボードの中にはフィールド定義が xml で格納されています。それをツールで取り出して、エディターで編集して、書き戻します。

                       

                      MacOS でしたら、キープランニング社の FMClipboardBroker | FileMaker開発, Webシステム開発のキー・プランニング

                      Windows でしたら、

                      http://filemaker-kou.up.seesaa.net/upload/FMClipboardEdit_0.1.zip

                      が有用でしょう。

                      • 8. Re: FileMaker Go でのCSVファイルインポート高速化
                        mddld

                        shin様

                         

                        返信が遅くなりました。

                        ご丁寧に回答していただきありがとうございます。

                         

                        当方Windowsでしたので、FMClipboardEditをダウンロードしました。

                        少々時間が取れずまだ試せていませんが、トライしてみたいと思います。