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

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

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

You are not logged in.

Announcement

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


#1 2019-11-29 17:41:08

shima
Member

繰り返しフィールドの計算につぃて

いつもお世話になります。
5回の繰り返しフィールドがありまして、そこにはテキストで計算式を入れています。
別の繰り返しフィールドに上記のテキストをEvaluate関数で計算したいのですが、スクリプトではなくLET関数を利用したいのですが。


繰り返しフィールドA    繰り返しフィールドB
1+1                   →     2
1+2                   →     3
1+3                   →     4
1+4                   →     5
1+5                   →     6

LET関数がどうもなじめなくてわかりません。
よろしくお願いします。

Offline

#2 2019-11-29 18:03:49

Shin
Member

Re: 繰り返しフィールドの計算につぃて

Evaluate ( フィールドA )
だけでいいですよ。

Offline

#3 2019-11-29 18:24:38

shima
Member

Re: 繰り返しフィールドの計算につぃて

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

確かに簡単な計算式では、問題ないのですが、繰り返しフィールドに入れる計算式に関連フィールドを含めた計算式を入れると
先頭行しか計算されず、後は”ゼロ”になってしまいます。

関連フィールドを含めた計算式で何か注意しないといけないのでしょうか?


繰り返しフィールドA      繰り返しフィールドB
TEST_A::b * 0.5      →  3
TEST_A::b * 0.5      →  0
TEST_A::b * 0.5      →  0
TEST_A::b * 0.5      →  0
TEST_A::b * 0.5      →  0

以上よろしくお願いします。

Offline

#4 2019-11-29 18:38:35

Shin
Member

Re: 繰り返しフィールドの計算につぃて

TEST_A::b が繰り返しフィールドでないのでしたら、
TEST_A::b[1] * 0.5
と書く必要があります。これは、繰り返しフィールドは、同じ繰り返し位置の内容を参照する特性によるものです。繰り返し1のフィールド(繰り返しでないフィールド)は、1の位置のみのフィールドとして取り扱われますので、他の繰り返しからそれを参照するには、繰り返し位置を指定する必要があります。
関連フィールドであっても、それは間径ありません。

Offline

#5 2019-11-29 22:27:02

shima
Member

Re: 繰り返しフィールドの計算につぃて

Shinさん

詳しい説明ありがとうございます。
奥が深いですね。
マニュアルにも記載しいないてことなので勉強になりました。
今後とも宜しくお願いします。

Offline

#6 2019-12-02 09:40:04

shima
Member

Re: 繰り返しフィールドの計算につぃて

Shinさん

アドバイス頂いた指定で計算することができました。
LET関数の勉強のため、下記の方法を試してみたのですが「?」が表示されてしまいます。

Dim_A_Calcu:計算式をテキストで設定した繰り返しフィールド
self : 下記の式を指定した計算フィールド

Let([
   $x=0;
   $fnc="
      let([
         $x=$x+1;
         self[x]=Evaluate ( Dim_A_Calcu[x] )
      ]; Evaluate($fnc))
   "
];
   Evaluate($fnc)
)

以上よろしくお願いします。

Offline

#7 2019-12-02 10:55:57

Shin
Member

Re: 繰り返しフィールドの計算につぃて

繰り返しフィールドの繰り返しの内容の取得
Extend の内容も参照して見てください。

ざっと式だけを見て、無限loop になっています。最終は、システムがオーバーフローエラーを出して終了しているはずです。
また、x という変数がありません。$x は定義されていますが。
ちなみに、self は関数に定義されています。フィールド名として使用することはできません。
計算フィールドは、自フィールドに値を返すだけですので、別の繰り返し位置に対しては、値を設定できないのでは。変数の設定は可能です。

Let Evaluate を使った再帰は、FM17以前のレガシーな手法です。While() を使いましょう。

Last edited by Shin (2019-12-02 13:10:27)

Offline

#8 2019-12-02 15:48:21

shima
Member

Re: 繰り返しフィールドの計算につぃて

Shinさん

返答ありがとうございます。
確かにじっくり見るとLoopになっていますね。
xは$xの間違いでした。

じっくり考えて、以下の計算式にて対応できました。

Let(
[
   $n=7;
   $x=0;
   $res="";
   $fnc=
      "Case($x=$n; GetValue ( $res ; Get ( 計算式繰り返し位置番号 ) );
         Let([
            $x=$x+1;
            #itm=Evaluate ( Dim_A_Calcu[$x] );
            $res=List($res; #itm)
         ]; Evaluate($fnc))
      )"
];
   Evaluate($fnc)
)

While関数はまた確認しておきます。
ありがとうございました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 562.36 KiB (Peak: 581.36 KiB) ]