初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-05-26 23:18:42

白玉
Guest

フィールド内容をランダムに並べ替える

初めて質問いたします。
Win8.1  FM12

英語の練習プリントを作成したいと考えております。

1.「問題リスト」テーブルにフィールドを3個作成し「I」「am」「Tom」というデータを入れる。
2.別のテーブル(もしくはレイアウト)に、「Tom」「I」「am」などの表示をさせる。

困っているのは、2.の段階でランダムにできないか、ということです。
イメージとしては、ボタンを押すたびに語句の順番がランダムに変わるものです。

こういったことは実現可能でしょうか?

#2 2014-05-27 01:02:28

Hiro
Member

Re: フィールド内容をランダムに並べ替える

お尋ねします。
(1.)のフィールド個数は、3個の固定で良いですか?

3個だけなら、組み合わせ数は6通りなので何とかFM式の力技でも計算可能ですが、
フィールド数が増えると組み合わせは階乗で増えるので、外部スクリプトのソート機能などで
補足しないとムリそう?


【補足】
繰り返しフィールドと動的値一覧機能を組み合わせて上手く行きましたので、
詳細説明代わりにサンプルをアップしておきます。

●サンプル「配列ランダムソート.fmp12」→ http://yahoo.jp/box/opuHlC
(※修正 14/5/27 17:20 → 動的値一覧の不具合を修正しました)

Last edited by Hiro (2014-05-27 17:24:00)

Offline

#3 2014-05-27 08:29:51

Moz
Member

Re: フィールド内容をランダムに並べ替える

急ごしらえでアレですが単語がいっぱいあっても大丈夫なものを作ってみました。
元の文とバラバラはテーブル分けてIDで結べばいいかと(汗)

・サンプル「英文をバラバラにする」random.fmp12
http://yahoo.jp/box/3Voha8

Offline

#4 2014-05-27 09:29:41

Shin
Member

Re: フィールド内容をランダムに並べ替える

乱数で、2この繰り返しを選んで、その内容を入れ替える、という事を十分な回数行えば、だいたい(でよければ)ランダムな順に変わります。候補数の倍位行えば実用上は十分です。サンプル数の少ない時には有効。

本格的には、テーブルへ展開して、乱数を設定してソート、という手が最良でしょうね。

Offline

#5 2014-05-27 14:08:49

barikan
Guest

Re: フィールド内容をランダムに並べ替える

Advancedであれば次のカスタム関数が利用可能かと思います。

/*
関数名 - ShuffleValues
引数 - 値一覧
*/

Let ( [
l = 値一覧 ;
c = ValueCount ( l ) ;
r = Floor ( Random * c ) + 1 ;
b = LeftValues ( l ; r - 1 ) & MiddleValues ( l ; r + 1 ; c - r )
] ;
GetValue ( l ; r ) & If ( ValueCount ( b ) > 0 ; ¶ & ShuffleValues ( b ) )
)

これで例えば、次のようにすると

Substitute ( ShuffleValues ( Substitute ( "I am Tom" ; " " ; ¶ ) ) ; ¶ ; " " )

am I Tom といった結果が得られます。

#6 2014-05-27 23:34:40

白玉
Guest

Re: フィールド内容をランダムに並べ替える

Hiroさん
サンプルまで作成していただきありがとうございます。勉強のため隅々まで拝見しました。
発想はできなくても雰囲気だけは理解したいのですが、2カ所ある  & Left(List(単語配列); 0)  の部分はどのような役割なのでしょうか?
また、繰り返しフィールドの単語を結合して、「語群フィールド」と「模範解答フィールド」を作成するにはどうしたら良いでしょうか?
すでにエクセルでセルごとに単語を入れたデータ(一文の最大単語数は12でした)があるので、それを繰り返しフィールドのにインポートしたいです。

Mozさん
サンプルまで作成していただきありがとうございます。スクリプトが理解できないのですが、そのままですぐ使えそうです。

Shinさん
アドバイスありがとうございます。皆さんのご意見とともに参考になります。

barikanさん
残念ながらAdvancedではありませんでした。でも、ありがとうございます。

#7 2014-05-28 01:26:10

Hiro
Member

Re: フィールド内容をランダムに並べ替える

> 2カ所ある  & Left(List(単語配列); 0)  の部分はどのような役割なのでしょうか?
主要式の再計算誘発トリガーとしての役割です。単語配列[1]の入力更新スクリプトを受けて、発火します。しかも、計算結果は常に「無」を返す式のため、主要式の結果に影響を及ぼす恐れがありません。

> 繰り返しフィールドの単語を結合して、「語群フィールド」と「模範解答フィールド」を作成するにはどうしたら良いでしょうか?
繰り返しフィールドの全項単語を半角スペース区切りで連結結合する式は、
    Substitute(List(繰り返しフィールド); [¶;" "])

> すでにエクセルでセルごとに単語を入れたデータ(一文の最大単語数は12でした)があるので、それを繰り返しフィールドのにインポートしたいです。
Excel[セル1~セル12] → FM[フィールド1~フィールド12] → 繰り返し[12]計算フィールド へとして、その式は、
    Choose(Get(計算式繰り返し位置番号); ""; フィールド1[1]; フィールド2[1]; ~ ; フィールド12[1])

Offline

#8 2014-05-28 18:50:16

白玉
Guest

Re: フィールド内容をランダムに並べ替える

皆様のアドバイスのおかげで自分の作りたいものが完成しそうです。
ありがとうございました。大変お世話にになりました。

Hiroさん
再度の質問にもお答えいただきありがとうございました。これからやってみます!

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 9 queries executed - Memory usage: 560.43 KiB (Peak: 579.13 KiB) ]