みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっています。
Macinotsh ファイルメーカー19を使用しています。
繰り返しフィールド「得点」内に数字で得点を入力しています。
繰り返しフィールド「順位」に高得点から降順に順位を振りたいと思っています。
「得点」という繰り返しフィールド24
縦に表示しています
74
130
130
68
98
78
「順位」繰り返しフィールドに
5
1
1
6
3
4
このように順位を表示させることはできないものでしょうか。
入力されたデータは、繰り返しフィールドになっています。
入力データ形式はこのままでなんとか順位を設定したいと思っています。
何卒、よろしくお願いします。
Offline
List ( 繰り返しフィールド )
SortValues( List ( 繰り返しフィールド ) )
を使い、
改行区切りフィールドに
130
130
98
78
74
68
と変換はしてみました。
この後、どのようにして、
順番を振るのか、
「順番の繰り返しフィールド」に戻すか、
新たに、フィールドを設定した方が良いのか苦戦中です。
Offline
繰り返しフィールドのデータを上から一つづづ変数に取り込みたいと思っています。
get(繰り返しフィールド, 取り出す位置)
となっているのですが、設定がうまくいきません。
$$データ1=get(繰り返しフィールド, 取り出す位置1)
$$データ2=get(繰り返しフィールド, 取り出す位置2)
変数の設定方法も教えていただけませんでしょうか。
Offline
繰り返しフィールドは使わない方が良いということは理解しているつもりですが、
すでに作成されている「繰り返しフィールドのデータ」に順位を付けることができれば目的は達成できます。
繰り返しフィールドデータを1番目から順に変数に取り込む方法も教えていただければありがたいと思っています。
よろしくお願いします。
Offline
GetRepetition で繰り返しフィールドのデータを全て変数に取り込むことができました。
$$A1 に 74
$$A2 に 130
$$A3 に 130
$$A4 に 68
$$A5 に 98
$$A6 に 78
ここから順位フィールドを6個設定し、スクリプトで順位を決定し、そこに順位を入れるスクリプトを考えてみます。
アドバイスがありましたらよろしくお願いします。
Offline
While (
[
lst = List ( 得点 ) ;
i = ValueCount ( lst )
] ;
i ;
[
cnt = cnt + ( GetValue ( lst ; i ) > 得点 ) ;
i = i ~ 1
] ;
cnt + 1
)
という計算フィールド(繰り返し)でいかがでしょう。検証していません
Offline
Shin 様
ありがとう御座います。
是非試してみます。
本当にありがとう御座いました。
Offline
lst = List ( 得点 ) ;
i = ValueCount ( lst )
の lst を 1st にしていたらこの計算式では一覧を表示できませんとかえってきました、提示頂いた箇所をそのままペーストし lst で通過できました。
次に
cnt = cnt + ( GetValue ( lst ; i ) > 得点 ) ;
i = i ~ 1
の箇所で 指定されたフィールドが見つかりませんと cnt のフィールドを問われています。
どこにcntのフィールドを設定したら良いのか見当がつきません。
今回、順位表示用の繰り返しフィールドを1つ作りました。
そのフィールドに、Shin様に教えて頂いたスクリプトを貼り付けてみました。
このようなフールドの作り方自体良いのか否か私にはわかっていません。
最初の質問した後、たくさんのフィールドを作成し途方に暮れていました。
Shin様 の提案とてもスマートで驚いています。
今回、提示いただいた方法で是非とも順位を表示したいと思っています。
良く理解できていないままの質問でお手数をおかけしますが、よろしくよろしくお願いします。
Offline
Shin 様
度々申し訳ありません。
今一度ご教示お願いします。
もう一度最初に帰って新たに作ってみました。
繰り返しフィールド(6)を「名前」「得点」「順位」3つのみ作成してみました。
「名前」「得点」「順位」
名前1 74 …
名前2 130 …
名前3 130 …
名前4 68 …
名前5 98 …
名前6 78 …
ーーーーーーー
順位フィールド(計算フィールド)の内容
While (
[
lst = List ( 得点 ) ;
i = ValueCount ( lst )
] ;
i ;
[
cnt = cnt + ( GetValue ( lst ; i ) > 得点 ) ;
i = i + 1
] ;
cnt + 1
)
ーーーーーー
指定したフィールドが見つかりません。というメッセージが出て、
cnt = cnt + ( GetValue ( lst ; i ) > 得点 ) ;
=の後の cnt が選択された状態になります。
どこかに cnt というフィールドを作成する必要があるのでしょうか?
Offline
最初の設定で、cnt = 0 が必要なんですね。忘れていました。
While (
[
lst = List ( 得点 ) ;
i = ValueCount ( lst ) ;
cnt = 0
] ;
i ;
[
cnt = cnt + ( GetValue ( lst ; i ) > 得点 ) ;
i = i - 1
] ;
cnt + 1
)
Offline
Shin 様
すごくシンプルになりました。
今回は閲覧できることが目的なので、繰り返しフィールドに頼ってしまいました。
このようなことができるとは本当に素晴らしいです。
ただ、甘えついでにもう一件教えてください。
実行結果は次のようになりました。
「名前」「得点」「順位」
名前1 74 3
名前2 130 5
名前3 130 5
名前4 68 4
名前5 98 1
名前6 78 2
100点未満であれば、全て正確に順位を振ってくれますが、
100点以上にのものはと逆に順位が下がってしまいます。
このことを解決する方法を教えていただけないでしょうか。
よろしくお願いします。
Offline
GetValue ( lst ; i )
だとテキストとして比較するので"10"<"2"などとなります。
+0とかして数値に変換して比較すればいいのでは。
ループしなくても、リストをソートしてその中の位置から計算できそうですが...
himadanee 様
文字列として判断しているから思い通りの結果が出なかったのですね。
ありがとう御座いました。
GetAsNumber 関数で解決できました。
これまで、お世話いただいた、
Shin 様 himadanee 様
今回も大変お世話になりました。
心より感謝申し上げます。
ありがとう御座いました。
Offline
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 610.46 KiB (Peak: 627 KiB) ]