みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも助け舟を出してもらっています。
fmp12
テーブルA
氏名
指定日付
テーブルB
氏名
日付起点
日付一覧(繰り返しフィールド)
氏名でリレーション中
指定日付と一致する値が日付一覧(繰り返しフィールド)にあったら
その値の繰り返し位置番号を返すような計算式はないでしょうか?
アドバイスを頂けると幸いです。
Offline
・答えは、A/Bテーブルのどちらで出すのですか?
また、
・日付一覧は、日付起点を起点とした連続する一連日付ですか?
(つまり、日付一覧内の日付からそのコマ位置が逆算可能か?)
Last edited by Hiro (2019-01-24 15:14:54)
Offline
Hiro様
コメントありがとうございます。
答えはAテーブルの別フィールドで出します。
日付一覧は一連日付ではなく日付起点を基に計算された規則性のない値です。
Let ([
$n = 1 ;
$c = "Case ( Bテーブル::日付一覧[$n] = Aテーブル::指定日付[1] ; $n ;
Let ( [$n = $n + 1 ] ; Evaluate ($c) )" ] ;
Evaluate ( $c )
)
こんな感じで行けるのかな?と思いましたがだめでした。
不規則な日付なら、現物を突き合わせないとだめですね!
例示再帰式に依るのが良さそうですが、
例示式だと同じ日付がない場合、無限ループになってしまいますネ!
ループ抜けの条件に、繰り返し限界回数をOR条件に入れると良いでしょう。
私が書くなら、多少冗長ですが安全に、(動作確認はしていません)
Let([
$n=30; //← 繰り返し回数を指定、30回を例示
$i=0;
$res="";
$fnc=
"Case($res or $i=$n; $res;
Let([
$i=$i+1;
$res=Case(Bテーブル::日付一覧[$i]=指定日付; $i)
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Last edited by Hiro (2019-01-24 16:38:50)
Offline
Caseの中のLetで
繰り返し位置を指定した値を得ないと。。
Offline
Hiro様
無事動作しました。
ありがとうございます。
チポ様
後学のために教えていただきたいのですが「繰り返し位置を指定した値を得ないと」というのはどういうことでしょうか?
自分の式だと一致する値がある場合でも?と表示されてしまいます。
Offline
Let ( [ $d = 指定日付 ;
$c = 1 ;
$a = "Case ( $c > 繰り返し回数 ; ""指定日付なし"" ;
$d = $r ; $c ;
Let ( [ $c = $c + 1 ; $r = 日付一覧[$c] ] ; Evaluate ( $a ) ) )"] ;
Evaluate ( $a ) )
これでいいんじゃないかな。
Offline
$r を定義しなくてもいいのでは。それと、1回目の評価で $r が定義されていないのが居心地悪いです。
チポさんのをそのまま流用させてもらって、
Let (
[ $d = 指定日付 ;
$c = 1 ;
$a = "Case ( $c > 繰り返し回数 ; ""指定日付なし"" ;
$d = 日付一覧[$c] ; $c ;
Let ( [ $c = $c + 1 ] ; Evaluate ( $a ) ) )"
] ;
Evaluate ( $a )
)
Offline
チポ様
Shin様
Evaluateの使い方難しいです。
精進します、ありがとうございました。
Pages: 1
[ Generated in 0.006 seconds, 8 queries executed - Memory usage: 562.73 KiB (Peak: 567.62 KiB) ]