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

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

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

You are not logged in.

Announcement

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


#1 2016-07-28 13:47:21

やまほん
Member

逆フィルタ

ver14 でwindows7です。

ある改行区切りになった値と別の改行区切りになった値とで逆フィルタをやりたいのですが、
方法が思いつきません。
説明では改行を","にします。

値)   
1,2,3,4,5
1,3

結果)
2、4,5

を求めたいです。
それぞれの値の順番は不定です。
↓このような場合もあります。

2,3,1,5,4
3,1

同じく
2、5,4 が結果としてほしいです。
結果の並び順は問いません。

なにか関数でシンプルに解決できないでしょうか?
値は実際には品名のような文字列で、10~100個程度です。

よろしくお願いします。

Offline

#2 2016-07-28 14:08:10

旅人
Member

Re: 逆フィルタ

以前Hiroさんがそんな計算式を作っていたような・・・?

Offline

#3 2016-07-28 14:42:30

旅人
Member

Re: 逆フィルタ

内容に依ってはSubstituteでできるか・・・

Offline

#4 2016-07-28 15:31:02

やまほん
Member

Re: 逆フィルタ

旅人さん

探しましたが見つかりません。。。
値を順番にsubstituteで””にでも置き換えていけばいいんでしょうか?
そうすれば、残りますね。
理屈はわかっても計算式が、、、私には難解です。

Offline

#5 2016-07-28 17:49:07

チポ
Member

Re: 逆フィルタ

きれいな式ではないのですが、再帰式で求めました

Let ( [
       $tx = ¶ & 元のテキスト & ¶ ;
       $k = 比較するテキスト ;
       $c = ValueCount ( $k ) ;
       $n = 0 ;
       $r = ¶ ;
       $s = "Case ( $n ≥ $c ; Middle ( $tx ; 2 ; Length ( $id ) - 2 ) ;
                 Let ( [ $n = $n + 1 ; $v = GetValue ( $k ; $n ) ; $id = Substitute ( $tx ; $r & $v & $r ; $r ) ] ; Evaluate ( $s ) ) )" ] ;
       Evaluate ( $s )
       )


やっていることは、
比較するテキストを1行ずつ取り出して、
元のテキストにそれが有れば消す。
その繰り返しです。

テキストが

  AB

  A

の様に内包されている場合を考慮して

  ¶AB¶

  ¶A¶

で比較する様にしています。

Last edited by チポ (2016-07-28 17:55:48)

Offline

#6 2016-07-28 18:43:35

旅人
Member

Re: 逆フィルタ

Substituteでも多分できますが、比較するテキスト側が数十行もあったら
GetValueで1行ずつ取り出す必要があるので、その式だけでかなりの長さ
になりそう。

Offline

#7 2016-07-28 20:50:15

Hiro
Member

Re: 逆フィルタ

所謂、FilterValuesの逆関数の機能ですネ。
再帰ループ式が一般的解法ですが既にチポさんが回答済なので、
代わって再帰ループ式でない一般(Substitute)式による別法をば!

Let(
[
   $prm[1]=元の一覧リスト;
      $prm[1]=¶ & $prm[1] & ¶;
   $prm[2]=比較する一覧リスト;
      $prm[2]="[\"\¶" & Substitute($prm[2]; [¶; "\¶\";\"\¶\"];[\"\¶"]) & "\¶\";\"\¶\"]";
         $prm[2]="Substitute($prm[1];" & $prm[2] & ")";
   $res=Evaluate($prm[2]);
      $res="\"" & Substitute($res;[¶;"\";\""]) & "\";\"\"";
         $res="List(" & $res & ")"
];
   Evaluate($res)
)

Last edited by Hiro (2016-07-28 21:02:34)

Offline

#8 2016-07-28 20:53:30

やまほん
Member

Re: 逆フィルタ

チポさん、Hiroさん、
式をご教授いただきまして、ありがとうございます!!
さっそくいまから試してみます。

Offline

#9 2016-07-28 21:16:25

やまほん
Member

Re: 逆フィルタ

試してみました。
残念ながら、チポさんの式ではうまく結果が出てきませんでした。
結果の出方がまちまちで、どううまく出ないかがお伝えできないのですが。
せっかく作っていただいたのに、ごめんなさい。
(私の式への値の入れ方がおかしいのかもしれません)

Hiroさんのほうでは結果OKでした。
みなさま、大変助かりました。
ありがとうございました。

Offline

#10 2016-07-29 11:50:25

チポ
Member

Re: 逆フィルタ

解決ですが、、

ああ、式のコピペで間違いが有りました


Let ( [
       $tx = ¶ & 元のテキスト & ¶ ;
       $k = 比較するテキスト ;
       $c = ValueCount ( $k ) ;
       $n = 0 ;
       $r = ¶ ;
       $s = "Case ( $n ≥ $c ; Middle ( $tx ; 2 ; Length ( $tx ) - 2 ) ;
                 Let ( [ $n = $n + 1 ; $v = GetValue ( $k ; $n ) ; $tx = Substitute ( $tx ; $r & $v & $r ; $r ) ] ; Evaluate ( $s ) ) )" ] ;
       Evaluate ( $s )
       )

これでいいでしょう。

Last edited by チポ (2016-07-29 11:50:49)

Offline

#11 2016-07-29 12:45:27

やまほん
Member

Re: 逆フィルタ

チポさん、
訂正ありがとうございます。
結果OKです!!
いつも助けていただいて感謝しています。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 521.46 KiB (Peak: 526 KiB) ]