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

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

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

You are not logged in.

Announcement

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


#1 2017-03-22 18:01:51

onias
Member

ソート後のレコードを先頭からある条件で連番をうまく反映できない

oniasです。こんにちは! FM15 Win10、8.1、iPhon6s

以下のソード済みのレコードへ条件付きでフィールドBへ
連番をうまくつけられないのですが。
※作業前でソート後の状態
フィールドA フィールドB
レコード1
レコード2
レコード3  文字入力A
レコード4
レコード5
レコード6 
レコード7  文字入力B
レコード8
レコード9
レコード10

以下のように番号を付与したいのですが、どうしてもうまくいきません。
※スクリプト反映後の状態として
レコードは数百ありますが、文字A、文字Bはどこに入るかバラバラです。
最初のAにたどり着くまでは、スペースが条件で、文字Aから以降は
次の文字にたどり着くまで「2」番から連番としたいのです、
フィールドA フィールドB
レコード1
レコード2
レコード3  文字入力A
レコード4    2
レコード5    3
レコード6    4
レコード7  文字入力B
レコード8    2
レコード9    3
レコード10   4

宜しくお願いします。

Offline

#2 2017-03-22 19:06:47

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

スクリプトで
レコードを一つ一つ確認して
文字入力A にぶつかったら
次のレコードが 文字入力B でない限り
フィールドに連番を入力していく
ということでしょうね。

ただ、最後はどうなるんでしょう?

Last edited by シーラカンス (2017-03-22 19:59:05)

Offline

#3 2017-03-22 19:58:33

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

細かいことがわからないので
フィールドBが基本的に空白で
そこに 文字入力B などのテキストが時々あるというレベルで
スクリプトを使って
連番を入れるサンプルを
http://yahoo.jp/box/-i04N3
におきました。

Offline

#4 2017-03-22 20:30:50

Hiro
Member

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

計算値で「フィールド内容の全置換」すれば一発です。

・フィールドは、「フィールドB 」とし、
・計算式は、以下

   Let([
      #n=Case(テーブル名::フィールドB<>""; 0; $n);
      $n=Case(#n>0; $n+1; テーブル名::フィールドB)
   ];
      $n
   )


【式訂正】
上式の結果に勘違いが有りましたので、訂正の上、お詫びします。
(連番を1番スタートと勘違いしてたのを2番スタートに変更しました。)

   Let([
      #chk=テーブル名::フィールドB<>"";
      $flg=Max($flg; #chk);
      $n=Case(#chk; 1; $n+1)
   ];
      Case($flg and $n>1; $n; テーブル名::フィールドB)
   )

Last edited by Hiro (2017-03-22 21:50:46)

Offline

#5 2017-03-22 21:34:15

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

Hiroさん
つかぬ事を伺いますが、
この計算式の結果ですが
次に使おうとすると
変数がクリアされてないんですよ
どうも、FMPの変数って仕様通りにいかないみたいで

私の環境は FMP12です。(13以降で変わっていればいいんですが)

Offline

#6 2017-03-22 22:16:51

Hiro
Member

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

シーラカンス wrote:

つかぬ事を伺いますが、
この計算式の結果ですが
次に使おうとすると
変数がクリアされてないんですよ
どうも、FMPの変数って仕様通りにいかないみたいで

あれ、妙ですネ。
利用しているのはローカル$変数なので、「全置換」処理終了と共に自動揮発消滅するかと?
当方FMP12環境でも仕様通りの挙動を確認しているのですが、...

あっ!そうか、もしかして、
前の置換済の連番がそのまま残ったままで再置換しているとか?
式は、フィールド値があるときはそのまま残留する設計です。

Offline

#7 2017-03-22 22:23:54

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

前にも書いたんですが、
FMPの変数は、仕様の通りではなくて
なんらかの問題で、都度クリアしてやらないと、前の最終値が残る場合があるので
どこかでクリアする計算を入れる、もしくは初期値を設定する必要があるらしいのです。
あの計算式だと、先回やった最後の値を引っ張ってしまうらしいのです。
ということなので
私のスクリプトでは、その影響を受けないように
ちょっと複雑になってしまったと追うことなんです。

それにしても、不思議なFMPの仕様だと思ってます。
これは、現状の問題点なので
多くの方に知っておいていただきたい注意点です。

Last edited by シーラカンス (2017-03-22 23:21:27)

Offline

#8 2017-03-22 22:47:17

Hiro
Member

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

こちらの全置換変数式の再度検証でも、そのような処理終了後の残留問題は見受けられません。

Offline

#9 2017-03-22 23:00:00

onias
Member

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

oniasです。
皆さん有難うございます。

やはり、変数を使わなければ、ダメなんですね。
勉強しなくては・・・

サンプルや計算式をいろいろ試させていただきましたが
最終的に、hiro様の【式訂正】を引用させていただきました。

何度も、繰り返しいろいろ試しましたが、期待どおりの値が
出るようになり、助かりました。

Offline

#10 2017-03-22 23:01:18

onias
Member

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

oniasです、追伸

私も、処理終了後の残留問題は見受けられませんでした。
なんでしょうね。

Offline

#11 2017-03-22 23:02:23

Re: ソート後のレコードを先頭からある条件で連番をうまく反映できない

Hiroさん
ごめんなさい
修正版の式では問題はありません。
タイムラグで
修正版があることに気づいていなかった
しかし、
修正前はなぜ 残るんでしょうねぇ?

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 11 queries executed - Memory usage: 570.98 KiB (Peak: 587.88 KiB) ]