8 返信 最新の回答 日時: Mar 11, 2010 5:44 AM ユーザー:やったもん

    数あるレコードの中からランダムに数枚のレコードを抽出するには

    やったもん

      タイトル

      数あるレコードの中からランダムに数枚のレコードを抽出するには

      フォーラムに投稿

      みなさんはじめまして、よろしくお願いします。

      私はファイルメーカーpro 9を使って英単語帳のようなデータベースを

      作っています。そこで質問ですが、数あるレコードの中からランダムに

      10枚 あるいは 20枚のレコードを抽出する方法はありますでしょうか?

      どなたかの貴重なアドバイスをよろしくお願いします。

        • 1. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
          Hiro
            

          全てのレコードに乱数を与えて、その乱数でソート、先頭から指定件数のレコードだけを抽出します。

           

          1.数字フィールド「乱数」 を作ります。

          2.以下のスクリプトを作成して、完成です。

           ・全レコードを表示

           ・フィールド内容の全置換[乱数;式=Random]

           ・レコードのソート[乱数;昇順ソート] 

           ・レコードへ移動[最初の] 

           ・複数レコードを対象外に[10]  //←抽出件数をココで指定

           ・対象外のみを表示 

          • 2. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
            やったもん
              

            Hiroさん、大変貴重なご回答をありがとうございます。

             

            なるほどと感心するばかりです。

            おおまかな流れは理解しました。しかしまだ成功には至っていない状態です。

            アドバイスのようにスクリプトを作り実行しましたがいつも同じレコードが抽出されます。

            私のやり方がまだ悪いのだと思います。以下に私のやった作業を書き出してみますので

            またよろしければアドバイス頂ければ幸いです。

             

            スクリプトを実行したところ

             

            ダイアログが表れ 対象となる1949レコードの「乱数」フィールド内のデーターを完全に置き換えますか

             

            ●置き換え  を選択    ●計算結果で置き換えを指定

             

            計算式 乱数フィールド=Randam

             

            レコードのソート 乱数 昇降順

             

            現在のレコードから数えて10レコードを対象から除外します 除外

             

            結果   いつもおなじレコード10レコードが表示されてしまう。

             

            以上、このような結果しか得られません。

            もう少しアドバイス頂ければ幸いです。よろしくお願いします。

            • 3. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
              Hiro
                

              説明代わりにサンプル「ランダムレコード抽出.fp7」を作り、下記URLにアップしておきました。

               

              http://briefcase.yahoo.co.jp/bc/brghspr/lst?&.dir=/352b/9df0&.src=bc&.view=l

               

              どうぞ、ご参考ください。

              • 4. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
                やったもん
                  

                 Hiroさん、こんばんは。

                 

                残念ながらダウンロード出来ませんでしたので、あとは自力で何とかやってみます。

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

                • 5. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
                  usuitax
                    

                  横からで申し訳ないのですが。

                   

                  やったもんさんのスクリプトには全レコードを表示するステップが抜けてませんか?

                  • 6. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
                    やったもん
                      

                    Usuitaxさん、コメントをありがとうございます。

                     

                    スクリプト名 ランダ抽出

                     

                    全レコードを表示

                    フィールド内容の全置き換え「英語データベース::乱数;英語データベース::乱数=Random

                    レコードのソート「記憶する;ダイアログなし」

                    レコード/検索条件/ページへ移動「最初の」

                    複数レコードを対象に「10」

                    対象外のみを表示

                     

                    上記のスクリプト内容で実行すると

                     

                    フィールド内容の全置き換え(ダイアログが表示される)

                      計算結果で置き換え  を選択すると

                     

                    複数レコードの除外(ダイアログが表示される)

                      現在のレコードから数えて10レコードを対象から除外します

                     

                                 除外を選択

                     

                    結果  乱数フィールドには0が入力された状態で

                         10枚のレコードが検索される。(いつも前から10枚同じレコード)

                     

                     

                    色々とスクリプトを工夫してトライしてみましたが、残念ながら成功には至っていません。

                     

                     

                    【余談】

                     

                    また、嬉しいニュースといたしましては、フィールド内容の全置き換え機能を応用して

                    各レコードにある □チェック項目 のチェックをすべてはずす、と言うスクリプトに成功

                    いたしました。お陰様でこちらのフォーラムで色々と勉強をさせてもらっています事を

                    ご報告いたします。

                     

                    これからもみなさんよろしくお願いします。

                     

                     

                     

                    • 7. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
                      Hiro
                        

                      「フィールド内容の全置換」で乱数が全フィールドに入力できてないのではないでしょうか。

                      各スクリプトステップの間に「スクリプト一時停止/再開」を仮設挿入して、意図した結果が

                      得られているか確認しながらスクリプトを設定するといいです。

                       

                      ●全レコードを表示

                      >「スクリプト一時停止/再開」

                      ●フィールド内容の全置換 [ダイアログなし; 英語データベース::乱数; Random]

                      >「スクリプト一時停止/再開」

                      ●レコードのソート [記憶する; ダイアログなし]

                      >「スクリプト一時停止/再開」

                      ●レコード/検索条件/ページへ移動 [最初の]

                      >「スクリプト一時停止/再開」

                      ●複数レコードを対象外に [ダイアログなし; 10] 

                      >「スクリプト一時停止/再開」
                      ●対象外のみを表示

                       


                      > フィールド内容の全置き換え「英語データベース::乱数;英語データベース::乱数=Random

                      赤字部が計算式の内容を記しているなら、ココが誤りです。式は、

                        (誤)英語データベース::乱数=Random → (正)Random

                      • 8. Re: 数あるレコードの中からランダムに数枚のレコードを抽出するには
                        やったもん
                          

                        Hiroさん、ありがとうございました。

                         

                        お陰様で、やっと成功しました。

                        本当にありがとうございました。「シャッフル10」と言う名前のボタンを作り

                        一気にダイアログなしで10枚のカードが抽出されるようになりました。

                         

                        ご指摘の通り、フィールド内容の全置き換え「ダイアログなし;英語データベース::乱数;Random」

                        に変更することで成功しました。  5分ほど格闘してやっと上記の記述とおりのスクリプトを作る事が

                        できました。

                         

                        本当にうれしいです。ありがとうございました。m(_ _)m