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

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

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

You are not logged in.

Announcement

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


#1 2014-01-05 08:23:23

drq
Guest

カスタム関数を探しています(引数:改行区切り文字列)

mac OSX + FileMaker Pro12(adv)です。

リストA(改行区切り文字列)と
リストB(同じく改行区切り文字列)を引数にした場合、
Aだが、Bでない改行区切り文字列、を出力したいのです。

【例】
リストA
A
B
C
D
E
F


リストB
B
C
E

の場合、
A
D
F
を出力したいのです。

このような要求を満たすカスタム関数または、考え方がありましたら、お教え下さい。

#2 2014-01-05 12:22:52

Hiro
Member

Re: カスタム関数を探しています(引数:改行区切り文字列)

カスタム関数例は、ZapValues(ListA;ListB)関数 http://www.briandunning.com/cf/193
FilterValues関数を利用した再帰計算で求めますが、
考え方は、ご自身で再帰ループ スクリプトを組んでみると理解し易いかな。


因みに、非Adv版でカスタム関数が使えない場合でも、一般標準関数だけで求めることも、
●最大リスト行数が290行までなら

Let([
  $lst_a=リストA;
  $lst_b=リストB;
  $i=0;
  $res="";
  $fnc="Case(
      $i=ValueCount($lst_a); $res;
      Let([
        $i=$i+1;
        $stg=GetValue($lst_a;$i);
          $stg=Case(IsEmpty(FilterValues($stg;$lst_b)); $stg);
        $res=List($res;$stg)
      ]; Evaluate($fnc))
    )"
];
  Evaluate($fnc)
)

●最大リスト行数が291行以上なら

Let([
  $prm[1]=リストA;
  $prm[2]=リストB;
  $m=150;  /*再帰分割単位数を指定*/
  $skp[1]=100;  /*速度と再帰限界アップ、スキップ数を設定*/
  $skp[2]=10;
  $all=ValueCount($prm[1]);
  $n[1]=0;
  $n[2]=Div($all-1;$m);
  $res="";
  /*再帰計算限界回避の分割処理*/
  $fnc[1]="Case(
      $n[1]>$n[2]; $res;
      Let([
        $i[1]=$m*$n[1];
        $i[2]=$i[1]+Min($all-$m*$n[1]; $m);
        $res=Evaluate($fnc[2]);
        $n[1]=$n[1]+1
      ]; Evaluate($fnc[1]))
    )";
  /*逆FilterValues関数の主式*/
  $fnc[2]="Case(
      $i[1]>=$i[2]; $res;
      Let([
        $add=Case(
            Let([$x=MiddleValues($prm[1];$i[1]+1;$skp[1])];$x=FilterValues($x;$prm[2])); Let($i[1]=$i[1]+$skp[1];\"\");
            Let([$x=MiddleValues($prm[1];$i[1]+1;$skp[2])];$x=FilterValues($x;$prm[2])); Let($i[1]=$i[1]+$skp[2];\"\");
            Let([$i[1]=$i[1]+1;$x=GetValue($prm[1];$i[1])]; IsEmpty(FilterValues($x;$prm[2]))); $x
            );
        $res=List($res; $add)
      ]; Evaluate($fnc[2]))
    )"
];
  Evaluate($fnc[1])
)

Last edited by Hiro (2014-01-05 12:54:59)

Offline

#3 2014-01-05 16:48:10

drq
Guest

Re: カスタム関数を探しています(引数:改行区切り文字列)

ズバリのカスタム関数があるのですね!ありがとうございます。

標準関数だけでやるのも、ご紹介有難うございます。
ちょっと難しそうですが、勉強になりそうです!

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: 548.26 KiB (Peak: 579.2 KiB) ]