みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FMpro12
Loop使ったスクリプトで悩んでいます。
繰り返しフィールドがあり空白かどうかをチェックしていき、繰り返し6フィールド分
空白であれば次のスクリプトに移行したいのですがうまくいきません。
10分刻みの時間軸[42]の繰り返しフィールドに
OnObjectEnter[Get(アクティブ繰り返し位置番号)]
変数を設定[$アクティブ繰り返し位置番号;値:GetValue(Get(スクリプト引数);1)]
変数を設定[$Loop終了値;値:$アクティブ繰り返し位置番号+6]
Loop
変数を設定[$アクティブ繰り返し位置番号;値:$アクティブ繰り返し位置番号+1]
IF[not IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号])
カスタムダイアログを表示(”繰り返しに文字がはいっています”)
IF(Get(最終メッセージ選択)=1)
現在のスクリプト終了【】
End If
Exit Loop IF($アクティブ繰り返し位置番号=$Loop終了値)
End Loop
というスクリプトを組んではみたのですがうまくいきません。
Loopを初めて使うのでいろいろとおかしいとは思いますがご指導して頂けないでしょうか?
どうなるんですか?
フィールド名が数字で始まってるのが変では。
どうなるんですか?
空白でも空白でなくても
メッセージ(”繰り返しに文字がはいっています”)がでて
スクリプトが終了してしまいます。
フィールド名が数字で始まってるのが変では。
確かに!!
フィールド名は説明用に変えさせて頂きました。
追記
変数を設定[$アクティブ繰り返し位置番号;値:GetValue(Get(スクリプト引数);1)]
変数を設定[$Loop終了値;値:$アクティブ繰り返し位置番号+6]
Loop
変数を設定[$アクティブ繰り返し位置番号;値:$アクティブ繰り返し位置番号+1]
IF[not IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号])
カスタムダイアログを表示(”繰り返しに文字がはいっています”)
IF(Get(最終メッセージ選択)=1)
現在のスクリプト終了【】
End If
Exit Loop IF($アクティブ繰り返し位置番号=$Loop終了値Exit Loop IF($アクティブ繰り返し位置番号=$Loop終了値)
End IF ←抜けていました
End Loop
同じ様なスクリプトで検証してみましたが、意図通りに動きますね。
繰り返しフィールドの設定が間違っているのでは。
loop で回すより、
IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号])and IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号+1])and ...
とした方が簡単では。
Offline
同じ様なスクリプトで検証してみましたが、意図通りに動きますね。
繰り返しフィールドの設定が間違っているのでは。loop で回すより、
IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号])and IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号+1])and ...
とした方が簡単では。
Shin様
検証までして頂いてありがとうございました。
実際は
変数を設定[$Loop終了値;値:$アクティブ繰り返し位置番号+任意の数字(2~6までの数字)]
となるため、かならず6というわけではないのです。
いろいろ省略して逆に煩わせて申し訳ありません
スクリプトが不安だったのでお聞きしましたが、スクリプトは問題ないとのことですので
他のところでおかしいところを調べてみます。
ありがとうございました。
私も新規で検証したのですがうまくいきません。
Shin様へ
繰り返しフィールドの設定がまちがっているというのは
どのような事が考えられるのでしょうか?
not IsEmptyで見ているアクティブ繰り返し位置番号と
引数で持ってきたアクティブ繰り返し位置番号がちがうのでは?
繰り返し数が6固定でなくても、Loopより単純にCase()を使って計算式を並べた方が簡単なのは確かでしょう。
何がうまくいかないのか・・
気になる点を、、
> GetValue(Get(スクリプト引数);1)
このスクリプトパラメータの設定は?
それに付随しますが、
> 変数を設定[$アクティブ繰り返し位置番号;値:$アクティブ繰り返し位置番号+1]
これは、
変数の初期値の次の繰り返し位置から始めていますよね。
回数が固定ではないのでは、スクリプトが手っ取り早いですよね。
Offline
ご回答有難うございました。
End Ifの位置を間違えていたみたいです。
下記の位置に変更したら動きました。
変数を設定[$アクティブ繰り返し位置番号;値:GetValue(Get(スクリプト引数);1)]
変数を設定[$Loop終了値;値:$アクティブ繰り返し位置番号+6]
Loop
変数を設定[$アクティブ繰り返し位置番号;値:$アクティブ繰り返し位置番号+1]
IF[not IsEmpty(10分刻みの時間軸[$アクティブ繰り返し位置番号])
カスタムダイアログを表示(”繰り返しに文字がはいっています”)
IF(Get(最終メッセージ選択)=1)
現在のスクリプト終了【】
End If
End If
Exit Loop IF($アクティブ繰り返し位置番号=$Loop終了値Exit Loop IF($アクティブ繰り返し位置番号=$Loop終了値)
End Loop
それに付随しますが、
変数を設定[$アクティブ繰り返し位置番号;値:$アクティブ繰り返し位置番号+1]
これは、
変数の初期値の次の繰り返し位置から始めていますよね。
ちなみにこれも思っていたのですが初期位置からはじめるにはどの様な方法があるのでしょうか?
簡単なのは
> 変数を設定[$アクティブ繰り返し位置番号;値:GetValue(Get(スクリプト引数);1)]
ここで、
-1
すればいいですね。
もう一つは
一連の処理の後に
変数を+1すればいいでしょう。
例では
Exit Loop Ifステップ
の次に持ってくればいいですね。
> $Loop終了値
この設定も考えてください。
Offline
皆様お世話になっております。
検証では出来たのですが本ファイルでやるとやはりうまくいきません。
同じようにLoopを使って空白にフィールド内容を書き込むスクリプトは正常に起動しているのでアクティブ位置番号や引数取得は
有っていると思います。
空白の検出がうまくいかないのかどうか?
Loopは一旦諦めました。
繰り返し数が6固定でなくても、Loopより単純にCase()を使って計算式を並べた方が簡単なのは確かでしょう。
Case()行う方法を教えて頂けませんか?
アクティブ位置番号の開始からに2~6を足した数字の空白を調べたいのですがCase()を使用する方法はどのように書いていいかおもいつきません。
宜しくお願いします。
Pages: 1
[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 540.55 KiB (Peak: 561.09 KiB) ]